echo() versus print()

Abgesehen davon, dass sowohl echo() als auch print() dafür verwendet werden, Ausgaben im Browser zu erzeugen, haben sie eine weitere Gemeinsamkeit: weder das eine noch das andere ist eine Funktion. Beide Befehle sind Sprachkonstrukte.

An dieser Stelle stößt man bereits auf die erste Tatsache, durch die sich die Konstrukte voneinander unterscheiden. Während echo() keinen Rückgabewert erzeugt, verhält sich print() zumindest wie eine Funktion und gibt grundsätzlich den Wert 1 zurück. Dadurch kann es in komplexeren Ausdrücken, wie dem ternärem Operator, verwendet werden:

$a ? print ($b) : print ($c);

Eine analoge Verwendung von echo(), würde einen parse error erzeugen.

Ein weitere Punkt, der bei den beiden Konstrukten verschieden ist, sind die Parameter. print() kann nur einen Parameter entgegen nehmen (mit und ohne Klammern), echo() dagegen können mehrere, jeweils durch ein Komma getrennte, Parameter übergeben werden. Verwendet man echo() mit Klammern, müssen diese jeweils um die Parameter gesetzt werden, nicht um den gesamten Ausdruck.

print ("foo");
print "foo";

echo ("foo");
echo "foo";
echo ("foo"), ("bar");
echo "foo", "bar";

Die Verwendung von print() kann unter Umständen zu einiger Verwirrung führen. Folgende Abfragen erzeugen unerwartete Ausgaben:

echo print ("foo") . print ("bar");
echo print "foo" . print "bar";

Würde man erwarten, dass zunächst foo, dann bar und zum Schluss die beiden Rückgabewerte ausgegeben werden, ist die Reihenfolge der Zeichenketten foo und bar vertauscht. Die Ausgabe lautet also nicht foobar11 sondern barfoo11. Um die gewünschte Reihenfolge zu erhalten, muss die Zeile wie eine der folgenden aussehen:

echo (print "foo") . (print "bar");
echo (print ("foo")) . (print ("bar"));

Ein ähnliches Phänomen taucht auch auf, wenn print() innerhalb einer Abfrage verwendet wird:

if (print ("foo") && print ("bar")) {} // Ausgabe: bar1
if (print "foo" && print "bar") {}     // Ausgabe: bar1

Richtig lauten die Abfragen so:

if ((print ("foo")) && (print ("bar")) {} // Ausgabe: foobar
if ((print "foo") && (print "bar")) {}     // Ausgabe: foobar

Im übrigen gibt print() newlines aus, während echo() sie "verschluckt".

print ("foo
bar baz");

echo ("foo
bar baz");

Die dazugehörige Ausgabe sieht folgendermaßen aus:

foo
bar baz

foo bar baz

Geht es um die Geschwindigkeit, so ist man mit echo() besser beraten. Weil echo () im Gegensatz zu print() keinen Rückgabewert erzeugt, ist das Sprachkonstrukt minimal schneller - allerdings ist der Unterschied so gering, dass er vernachlässigt werden kann.

Annika , 03.08.2010 um 21:03

php echo print