• Heredoc und Nowdoc

    von am 4. September 2008

    Heute war es wieder soweit: Ich wollte diesen praktischen String-Operator verwenden. Aber ich kam – mal wieder – nicht auf den Namen. Damit dies nicht wieder vorkommt, wird er nun hier festgehalten. Gemeint ist der Heredoc-Operator. Dessen Wurzeln liegen in der *nix-Shell-Programmierung. Somit ist auch klar, warum er mir als Windows-Nutzer weniger geläufig ist.

    Zur Anwendung: Möchte man einen String deklarieren, so gibt es im Wesentlichen zwei Möglichkeiten: Doppelte und einfache Anführungszeichen. Kommen die gleichen Anführungszeichen im String selbst vor, so müssen sie mit einem Backslash maskiert werden. Dies kann bei größeren Mengen Text lästig sein. Mit der Heredoc-Syntax kann auf die Anführungszeichen verzichtet werden:

    $name = 'Betty';
    $text = <<<EOL
    Hier kommt jede Menge Text. Z.B. Mein Name ist $name.
    EOL;

    Der String wird eingeleitet mit dem Heredoc-Operator <<<, gefolgt von einem beliebigen Identifier (beliebig, sofern die üblichen Namenskonventionen eingehalten werden). Der eigentliche Text darf erst in der nächsten Zeile auftauchen.
    Wichtig ist auch, dass der schließende Identifier mit dem öffnenden identisch ist. Er muss am Anfang der Zeile stehen (also auch ohne Einrückung davor) und wird gefolgt von einem Semikolon.

    Abgesehen von dieser speziellen Syntax verhält sich ein mit Heredoc deklarierter String genauso wie ein String in doppelten Anführungszeichen, d.h. Variablen werden geparst usw.

    Das Gegenstück (also: Heredoc mit einfachen Anführungszeichen) wird es erst ab PHP 5.3 geben und nennt sich Nowdoc. Die Nowdoc-Syntax entspricht der von Heredoc mit dem kleinen Unterschied, dass der einleitende Identifier in einfachen Anführungszeichen notiert wird. Nowdoc ist z.B. dann ganz praktisch, wenn der String Programm-Code darstellt, der gerade nicht geparst werden soll:

    $nowdoc = <<<'EOL'
    $name = 'Betty';
    print $name;
    EOL;

    Übrigens: In der deutschen Wikipedia gibt es zur Zeit keinen Eintrag zu Heredoc. Wer mehr erfahren und die leicht unterschiedliche Syntax je nach Sprache oder Shell vergleichen möchte, sei auf den englischsprachigen Artikel verwiesen.

    PHP-Handbuch: http://de.php.net/manual/de/language.types.string.php
    Wikipedia: http://en.wikipedia.org/wiki/Heredoc

    Frank Giesselmann-Wilms

    „Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores ...

    Zum Profil von Frank Giesselmann-Wilms

    4 Kommentare »


    • copa017
      am 25. Juni 2009 um 09:26 Uhr

      “Prima, jetzt hab ich es verstanden”
      Vielen Dank für diesen informativen Beitrag !


    • Albert
      am 25. Juni 2009 um 21:15 Uhr

      Hier der Wiki Link:
      http://de.wikipedia.org/wiki/Heredoc

      sonst super erklärt, Danke
      Albert


    • DSB
      am 30. Dezember 2009 um 11:11 Uhr

      Ich kannte die Heredoc-Syntax zwar, habe aber irgendwie noch nie einen konkreten Anwendungsgrund gehabt. Größere Textmengen kommen bei mir meist aus der Datenbank oder aus Templatedateien und sind so leichter wartbar als ein Heredoc-Block mitten im Code.
      Benutzt das jemand und wenn ja wofür? Mir fällt gerade gar kein Anwendungsbeispiel ein.


    • Sammy98
      am 5. März 2010 um 11:54 Uhr

      @DSB: genau das dachte ich mir auch ..

      Ich habe für diese “riesen” Neuerung in PHP 5.3 gleich mal ne Runde gesucht was das ist und kann – danke für den Artikel und die gute Zusammenfassung

      Gruß
      Sammy98

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.