Abschnitt 3 · Lektion 3
Längere Texte
Ein Text über mehrere Zeilen, mit Anführungszeichen darin, und mittendrin soll ein Name eingesetzt
werden. Mit den Mitteln aus Lektion 2.2 wird das schnell unleserlich: überall Backslashes, überall
\n, und am Ende sieht der Code nicht mehr aus wie der Text, den er erzeugt.
PHP hat dafür eine eigene Schreibweise, und sie hat einen etwas sperrigen Namen.
Heredoc, der Text am Stück
<?php
$name = "Mia";
$nummer = "4711";
$brief = <<<BRIEF
Hallo $name,
deine Bestellung $nummer ist unterwegs. Wir haben sie heute
dem Versand übergeben.
Viele Grüße
Bergblick GmbH
BRIEF;
echo $brief, "\n"; Ein Heredoc fängt mit drei spitzen Klammern und einem selbst gewählten Namen an, hier BRIEF.
Danach kommt der Text, so wie er aussehen soll, über beliebig viele Zeilen. Beendet wird er durch
denselben Namen in einer eigenen Zeile, gefolgt vom Semikolon.
Innerhalb dieses Textes gilt alles, was du von doppelten Anführungszeichen kennst: $name und
$nummer werden eingesetzt. Was du nicht brauchst, sind Maskierzeichen. Ein Anführungszeichen ist
hier ein gewöhnliches Zeichen, ein Zeilenumbruch entsteht dadurch, dass du eine neue Zeile anfängst.
Für die Endmarke gibt es zwei Regeln. Die erste: Sie fängt eine eigene Zeile an, vor ihr darf nur Leerraum stehen. Was hinter ihr kommt, ist seit PHP 7.3 dagegen wieder frei, ein Heredoc darf also mitten in einem Funktionsaufruf stehen und die Marke direkt eine schließende Klammer tragen. In älteren Fassungen war dort nur ein Semikolon oder ein Komma erlaubt, deshalb sieht man das Muster in altem Code kaum. Die zweite Regel ist bloß eine Verabredung: Der Name steht in Großbuchstaben, damit man die Marke beim Überfliegen sofort findet.
Nowdoc, wenn wirklich alles stehen bleiben soll
<?php
$name = "Mia";
$hinweis = <<<'ANLEITUNG'
Schreib $name in doppelte Anfuehrungszeichen, dann setzt PHP
den Wert ein. In einfachen bleibt der Name stehen.
Ein Backslash-n sieht so aus: \n
ANLEITUNG;
echo $hinweis, "\n";
echo "Zum Vergleich mit Ersetzung: $name\n"; Manchmal will man das Gegenteil: einen Text, in dem ein Dollarzeichen ein Dollarzeichen bleibt. Ein Hilfetext über PHP zum Beispiel, ein Stück Beispielcode, eine Vorlage, in die später jemand anderes Werte einsetzt.
Dafür setzt du den Namen hinter den spitzen Klammern in einfache Anführungszeichen:
<<<'ANLEITUNG'. Das ist die einzige Änderung, und sie schaltet jede Ersetzung ab. Im Beispiel bleibt
$name als $name stehen, und das \n in der letzten Zeile erscheint als Backslash und n.
Das Verhältnis der beiden ist genau dasselbe wie bei den Anführungszeichen aus Lektion 2.2: die eine Sorte denkt mit, die andere nicht. An den einfachen Anführungszeichen erkennst du hier wie dort, dass nichts ersetzt wird.
Der Einzug in der Endmarke
<?php
$stand = "offen";
$bericht = <<<TEXT
Stand: $stand
Geprueft am 25.08.2026
TEXT;
echo $bericht, "\n";
echo "Vom Einzug im Code ist nichts uebrig.\n"; Seit PHP 7.3 darf die Endmarke eingerückt sein, und das ist praktischer, als es klingt. Ihr Einzug bestimmt nämlich, wie viel Einzug PHP von jeder Zeile des Textes abzieht.
Im Beispiel stehen Text und Endmarke vier Leerzeichen weit rechts, und in der Ausgabe ist davon nichts mehr übrig. Der Code darf also ordentlich eingerückt bleiben, ohne dass die Einrückung mitgeschickt wird. Vor 7.3 musste ein Heredoc ganz links kleben, mitten im schönsten eingerückten Block, und genau das sieht man in älteren Projekten noch oft.
Ein Wort der Warnung dazu: Rück den Text nie weniger weit ein als die Endmarke. Das ist ein Parse-Fehler, und ausnahmsweise ist die Meldung dazu hilfreich, sie nennt den Einzug, den sie erwartet hätte.
Wofür man das wirklich nimmt
<?php
$name = "Mia";
$punkte = 240;
echo <<<SEITE
<h1>Hallo $name</h1>
<p>Du hast $punkte Punkte gesammelt.</p>
<p>Weiter so.</p>
SEITE; Drei Fälle kommen im Alltag ständig vor: der Text einer E-Mail, eine SQL-Abfrage über mehrere Zeilen, und ein Block HTML. Der letzte ist der häufigste, und er ist zugleich der erste Blick auf das, was diesen Kurs ab Abschnitt 10 ausmacht.
Sieh dir bei diesem Beispiel beide Stellen an. Für dieses eine läuft ein Server, im Reiter
Browser steht also die Seite, mit einer echten Überschrift. Tipp dann php index.php im
Terminal: Da steht dieselbe Ausgabe als Zeichen, eine spitze Klammer, ein h, eine Eins. Derselbe
Code, zweimal angesehen.
Das ist genau der Punkt aus Lektion 1.3: Was PHP ausgibt, ist erst einmal nur Text. Ob daraus eine Seite wird, entscheidet sich woanders. In den anderen Lektionen dieses Abschnitts steht die Ausgabe im Terminal, denn dort geht es um Textdetails, und die verschwinden im Browser.
Zum Mitnehmen
Sobald ein Text mehrere Zeilen hat und selbst Anführungszeichen enthält, wird das Maskieren zur Qual. Heredoc und Nowdoc nehmen dir das ab, und der Unterschied zwischen beiden ist derselbe wie bei den zwei Sorten Anführungszeichen.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 4 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.