PHP Echo und print: Ausgaben erzeugen

Die Ausgabe von Werten erfolgt über das PHP echo Konstrukt (oder print). Das ist gerade zu Beginn sehr wichtig. Später wird es in der Praxis häufig auf der Kommandozeile genutzt. Wenn Du z.B. auf Symfony basierte CLI Kommandos schreibst, kannst Du so Werte ausgeben.

PHP echo: einfache Ausgaben erzeugen

In PHP gibt es mehrere Wege um eine Ausgabe zu erzeugen. Häufig wird einfach echo verwendet. Die Nutzung ist relativ selbsterklärend:

echo "Hello, World";

Die Ausgabe? Genau, Dein erstes „Hallo, Welt“.

Das ist alles weitestgehend selbsterklärend und schnell gemerkt.

Spannend sind eigentlich die Auswirkungen in verschiedenen Umgebungen, die Kniffe oder Ausnahmen.

Output mit print erzeugen

In PHP hat die print-Konstrukt exakt das gleiche Ergebnis. Nur der Aufruf ist etwas anders:

print("Hello, World");

Die Funktion wird als solche angesprochen. Es werden also Klammern verwendet. Ansonsten gelten die Einschränkungen für Text und Co. gleichermaßen.

Inhaltlich verhalten sich beide Alternativen gleich. Rein optisch kann es eine Stilfrage sein, ob lieber die Klammern bei print(„…“) oder einfach nur echo „…“ verwendet wird.

Es gibt jedoch einen wirklichen Unterschied bei der ewigen Frage „print vs echo“.

print vs echo in PHP?

Beide PHP-Konstrukte geben Text aus. Der Unterschied ist der Funktionsaufruf bei print(). Der weicht nicht nur optisch ab.

Wird print aufgerufen, versucht PHP die Ausgabe im aktuellen Kontext. Das kann direkt Stdout der Unix Konsole sein. Oder einfach die Ausgabe im Browser.

In manchen Szenarien werden aber Dinge wie Output-Buffer verwendet. Schlägt die Ausgabe hier fehl, signalisiert print das über den Rückgabewert.

Gleichzeitig kann print() in Ausdrücken verwendet werden. Durch den Rückgabewert, der immer 1 ist, lassen sich Operationen verknüpfen:

if (print("debug: login check" && $isLoggedIn) {
    // ...
}

Zugegeben ein eher theoretischer Nutzen. Aber trotzdem eben so denkbar.

Performance: print oder echo?

Zumindest in der Theorie haben die verschiedenen Wege der Ausgabe Auswirkung auf Performance. Grundlegend ist echo die schnellste Option. Es gibt kein Rückgabewerte.

Allerdings ist das nur theortisch ein Problem. Bei PHP Performance gibt es dazu einen Benchmark.

In der Praxis können echo und print wahlweise verwendet werden. Formatierte Ausgabe durch printf, sprintf & Co. ist allerdings tatsächlich etwas weniger performant. Dazu aber in einem anderen Abschnitt mehr.

Wichtig nur: ein Keyword nutzen und dann konsequent im ganzen Projekt entweder echo oder print verwenden.

Textausgabe im Browser

Mit „echo“ werden einfach Texte ausgegeben. Wichtig: es wird kein Format angewandt. Ein Browser interpretiert die Inhalte in PHP-Skripten (ohne zusätzliche Maßnahmen) als MIME-Type „text/html“. Du musst also mit HTML arbeiten.

Das hat schon erste Konsequenzen, wenn Du mehrere Zeilen ausgeben willst. Mittels „echo“ erscheinen keine Zeilenumbrüche. Mehrere Aufrufe hängen Text aneinander. Du musst Dich um einen Linebreak mittels „<br>“ kümmern.

Die einfachste Variante für Ausgaben im Browser, mit Zeilenumbruch am Ende, wäre also:

echo "Hallo, Welt<br>";

Die Rolle von Anführungszeichen

Eigentlich ein Thema für Zeichenketten und Strings, aber auch bei der Ausgabe oft erst bemerkt. PHP macht einen Unterschied bei den Zeichenketten.

Mit einfachen Anführungsstrichen, werden keine Variablen, Escapezeichen und andere Sonderrollen verarbeitet:

$name = "Jan";
echo 'Hallo, $name<br>';

Dieses Beispiel ersetzt die Variable nicht. Das funktioniert nur bei doppelten Anführungszeichen:

$name = "Jan";
echo "Hallo, $name<br>";

Diese Ausgaben beziehen sich auf den Browser. Wie sieht es in Befehlen für die Kommandozeile aus, z.B. wenn Du für Symfony einen Befehl erstellst?

Ausgaben auf der Kommandozeile

Auf der Kommandozeile funktionieren und echo und print identisch wie im Browser. Du kannst Variablen ausgeben. Die Syntax ist gleich.

Ein Fehler bei Einsteigern ist allerdings, den Zeilenumbruch nicht auszugeben. Der wird auf der Kommandozeile nicht mehr mit HTML dargestellt:

$name = "Jan";
echo "Hallo, $name\n";

Auch dabei gilt: die Escape-Zeichen funktionieren nicht in einfachen Anführungszeichen.

Zu Bedenken ist noch der Unterschied zwischen Linux/Unix und Windows/DOS. Die Zeilenumbrüche werden anders dargestellt:

  • DOS: \r\n
  • Unix: \n

Damit Dein Programm optimal funktioniert, bietet PHP dafür eine Konstante:

PHP_EOL

Du kannst also immer diese Konstante verwenden:

$name = "Jan";
echo "Hallo, $name" . PHP_EOL;

Wichtig: wie im Beispiel nicht in den String mit aufnehmen. Wenn Du viele Ausgaben erzeugen muss, an verschiedenen Stellen, bietet es sich an, eine Funktion zu schreiben:

function writeLine($msg) 
{
    echo "$msg" . PHP_EOL;
}

writeLine("Hallo Welt");

Die kannst Du immer wieder aufrufen. Im Kontext von Symfony und anderen Bibliotheken stehen solche Methoden bereits zur Verfügung.

Debugging mit echo & Co?

Wie jeder Entwickler machst Du Fehler. Wenn die Syntax korrekt ist, kommen irgendwann logische Fehler:

  • Werte werden nicht richtig übergeben
  • Variablen enthalten den Wert NULL
  • es wird mit falschen Werten gerechnet
  • und ähnliches

Um solchen Problemen auf die Spur zu kommen, sind Debugger wie xDebug in Verbindung mit PhpStorm zu empfehlen.

Aber: Du musst bei einfachen ersten Schritten nicht mit Kanonen auf Spatzen schießen. Das ist für fortgeschrittene Entwickler, die schon einige Zeit programmieren.

Die Lösung: verfolge den Weg Deiner Werte durch Parameter, an Funktionen übergebene Werte, in Schleifen, bei Rückgabewerten.

Gerade bei einfachen Lösungen kannst Du zu Beginn Werte einfach ausgegeben. Allerdings: bei der Entwicklung komplexer Lösungen wird das zunehmend schwieriger.

Weiterführende Links