Heredoc und Nowdoc
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 li
egen 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 http://www.phpaide.com/?langue=fr&id=17 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