| Heredoc und Nowdoc |
Zeichenketten mit HEREDOC und NOWDOCViele angehende PHP Programmierer kennen beim Umgang mit Zeichenketten, auch bekannt als Strings, meist nur die beiden Möglichkeiten diese mit Einfachen Anführungszeichen (Single Quotes) oder Doppelte Anführungszeichen (Double Quotes) zu umschließen. Bei längeren Textpassagen oder speziell bei einem größeren Abschnitt mit HTML, kommt es nicht selten zu regelrechten Escape-Orgien und unterbrochenen/verketteten Strings. Wer kennt nicht solche Konstrukte?! $seite = "google.de"; $url = "<p>Hier geht's zu <a href=\"http://www." . $seite . "\" class=\"extern\">" . $seite . "</a></p>"; Bei einer Zeile ist das gerade noch vertretbar und durch geschicktes ändern der Quotes könnte man das zwar noch etwas übersichtlicher gestalten, aber wie unübersichtlich und fehleranfällig das wird, wenn man jetzt 5, 25 oder noch mehr solcher Zeilen hat, haben die meisten sicher selbst schon erlebt. PHP bietet uns aber eine Möglichkeit lange Zeichenketten zu kapseln, diese mit Quotes und Variablen zu spicken und trotzdem sehr übersichtlich zu bleiben. HEREDOCDie HEREDOC Schreibweise unterliegt weitestgehend den gleichen Eigenschaften, als ob man Text in Double Quotes einbettet. Das bedeutet, dass Variablen geparsed werden. Steuerzeichen wie der Zeilenumbruch (\n), Tabulator (\t), usw. werden ausgeführt. Man kann aber ohne Probleme Anführungszeichen einsetzen und mischen, ohne ständig den Text unterbrechen zu müssen. Hier ein kleines Beispiel eines Textblocks, gekapselt in eine HEREDOC Syntax: $beispieltext_a = <<<HEREDOC <p>Die besten PHP Tutorials findet man auf {$url}!</p> <p>HEREDOC verhält sich wie Text in <a href="http://www.phpbuddy.eu/anfuehrungszeichen-single-quotes-double-quotes.html">Double Quotes</a> mit all seinen Eigenheiten. So erzeugt das Steuerzeichen \\n \n im Browser Quelltext einen Zeilenumbruch.</p> <p>Einfache Anführungszeichen ' und Doppelte Anführungszeichen " müssen nicht mit einem \\ escaped werden.<br /> Der Backslash \\ ist das Escape-Zeichen und muss logischerweise selbst escaped werden um ihn darzustellen.</p> <p>HEREDOC eignet sich auch um HTML und PHP Code zu mischen und den Quelltext übersichtlich zu halten. Beispiel:</p> <ul> <li>{$liste[0]}</li> <li>{$liste[1]}</li> <li>{$liste[2]}</li> </ul> <p>Um das Parsen von Code zu verhindern, muss man ihn escapen: {\$url}</p> HEREDOC; Wir weisen also einen Textblock der Variablen $beispieltext_a zu. Wie deutlich zu sehen ist, wird der Text nirgends unterbrochen und auch Anführungszeichen werden nicht escaped. Was man bei der HEREDOC und NOWDOC Syntax genau beachten muss erkläre ich weiter unten in der Hinweis Box. Da die Regeln für beide Varianten identisch sind, erkläre ich das am Ende dieses Artikels. NOWDOCDas Gegenstück zu HEREDOC ist NOWDOC. Verhält sich Text in einem HEREDOC Abschnitt, als stehe er in Double Quotes, verhält sich Text in einem NOWDOC Abschnitt, als stehe er in Single Quotes. Wichtiger Hinweis: Die Syntax bei beiden Varianten ist identisch mit dem kleinen Unterschied, dass der Delimiter bei NOWDOC in einfache Anführungszeichen (Single Quotes) steht! Hier ein Beispiel: $beispieltext_b = <<<'NOWDOC' <p>NOWDOC verhält sich dagegen wie Text in Single Quotes. Variablen werden nicht geparst: {$url}</p> <p>Selbst ganze PHP Code Blöcke werden nicht ausgeführt (Rechtsklick Quelltext anzeigen):</p> <?php echo 'Ich bin ein Beispieltext.'; ?> <ul> <li>{$liste[0]}</li> <li>{$liste[1]}</li> <li>{$liste[2]}</li> </ul> <p>Der Backslash \ hat im NOWDOC keine Bedeutung, weil es nichts zu escapen gibt.</p> NOWDOC; Sämtliche Variablen, Steuerzeichen, sogar ganze PHP Code Blöcke werden nicht ausgeführt. Wichtige Regel für den Einsatz von HEREDOC und NOWDOCWie oben mehrfach erwähnt, unterliegen die beiden *DOC Varianten den globalen Bestimungen im Umgang mit Strings. Welchen Unterschied und welchen Einfluss die Wahl der Anführungszeichen auf eine Zeichenkette hat kann im Tutorial Single Quotes oder Double Quotes nachgelesen werden.
Zum Abschluß noch der Hinweis auf die phpBuddy.eu Demo Seite - einen permanenten Link findet man auch auf der linken Seite im Menü Quicklinks. Auf der Demo Seite findet man die kompletten Listings und eine live Demo zu sämtlichen Quick Tips und diversen anderen Tutorials. Bis zum nächsten Quick Tip, Eine live Demo und den vollständigen Code findest Du auf der phpBuddy.eu Demo Seite. |