Gibt einen oder mehrere Ausdrücke ohne zusätzliche Zeilenumbrüche oder
Leerzeichen aus.
echo ist keine Funktion, sondern ein Sprachkonstrukt.
Seine Argumente sind eine Liste von Ausdrücken, die dem Schlüsselwort
echo folgen und nicht durch Kommas getrennt und durch
Klammern abgegrenzt sind. Im Gegensatz zu einigen anderen Sprachkonstrukten
hat echo keinen Rückgabewert, sodass es nicht im
Zusammenhang mit einem Ausdruck verwendet werden kann.
echo besitzt zusätzlich eine Syntax-Kurzform, bei der
Sie ein Gleichheitszeichen direkt nach einem öffnenden PHP-Tag anfügen.
Diese Syntax ist auch bei deaktivierter Konfigurationseinstellung
short_open_tag verfügbar.
Ich habe <?=$foo?> foo.
Der Hauptunterschied zu print ist, dass
echo mehrere Argumente entgegennimmt, und keinen
Rückgabewert hat.
Ein oder mehrere durch Kommas getrennte String-Ausdrücke, die
ausgegeben werden sollen. Nicht-String-Werte werden in Strings
umgewandelt, auch wenn die Direktive
strict_types aktiviert ist.
// Strings können entweder individuell als mehrere Argumente oder // miteinander verbunden als einzelnes Argument übergeben werden echo 'Dieser ', 'String ', 'besteht ', 'aus ', 'mehreren Parametern.', "\n"; echo 'Dieser ' . 'String ' . 'wurde ' . 'mit ' . 'Stringverkettung erzeugt.' . "\n";
// Es wird kein Zeilenumbruch oder Leerzeichen eingefügt; das Folgende gibt // "HalloWelt" in einer Zeile aus echo "Hallo"; echo "Welt";
// Dasselbe wie oben echo "Hallo", "Welt";
echo "Dieser String umfasst mehrere Zeilen. Die Zeilenumbrüche werden mit ausgegeben.";
echo "Dieser String umfasst\nmehrere Zeilen. Die Zeilenumbrüche\nwerden mit ausgegeben.";
// Das Argument kann ein beliebiger Ausdruck sein, der einen String erzeugt $foo = "ein Beispiel"; echo "foo ist $foo"; // foo ist ein Beispiel
$fruechte = ["Zitrone", "Orange", "Banane"]; echo implode(" und ", $fruechte); // Zitrone und Orange und Banane
// Nicht-String-Ausdrücke werden in String umgewandelt, auch wenn // declare(strict_types=1) verwendet wird echo 6 * 7; // 42
// Da echo sich nicht wie ein Ausdruck verhält, ist der folgende Code ungültig. ($eine_variable) ? echo 'true' : echo 'false';
// Folgende Beispiele funktionieren hingegen: ($eine_variable) ? print 'true' : print 'false'; // print ist auch ein Konstrukt, // aber es ist ein gültiger Ausdruck, der 1 zurückgibt, // also kann es in diesem Kontext verwendet werden.
echo $eine_variable ? 'true': 'false'; // den Ausdruck zuerst auswerten und // dann an echo übergeben ?>
Wenn ein einzelnes Argument in Klammern an echo
übergeben wird, löst das keinen Syntaxfehler aus und erzeugt eine Syntax,
die wie ein normaler Funktionsaufruf aussieht. Dies kann jedoch
irreführend sein, denn die Klammern sind tatsächlich Teil des
auszugebenden Ausdrucks und nicht Teil der echo-Syntax
selbst.
<?php echo "Hallo"; // gibt "Hallo" aus
echo("Hallo"); // gibt auch "Hallo" aus, weil ("Hallo") ein gültiger Ausdruck ist
echo(1 + 2) * 3; // gibt "9" aus; die Klammern bewirken, dass zuerst 1+2 ausgewertet wird, dann 3*3 // Die echo-Anweisung sieht den gesamten Ausdruck als ein Argument
echo "Hallo", " Welt"; // gibt "Hallo Welt" aus
echo("Hallo"), (" Welt"); // gibt "Hallo Welt" aus; die Klammern sind Teil des jeweiligen Ausdrucks
echo("Hallo", " Welt"); // löst eine Syntaxfehler aus, weil ("Hallo", " Welt") kein gültiger Ausdruck ist ?>
Tipp
Die Übergabe mehrerer Argumente an echo kann
Schwierigkeiten vermeiden, die durch den Vorrang des Verkettungsoperators
in PHP entstehen. Zum Beispiel hat der Verkettungsoperator eine höhere
Priorität als der Ternäre und vor PHP 8.0.0 hatte er die gleiche Rangfolge
wie die Addition und die Subtraktion:
<?php // Im Folgenden wird der Ausdruck 'Hallo ' . isset($name) zuerst ausgewertet // und ist immer wahr, daher ist das Argument für echo immer $name echo 'Hallo ' . isset($name) ? $name : 'Max Mustermann' . '!';
Passing multiple parameters to echo using commas (',')is not exactly identical to using the concatenation operator ('.'). There are two notable differences.
First, concatenation operators have much higher precedence. Referring to http://php.net/operators.precedence, there are many operators with lower precedence than concatenation, so it is a good idea to use the multi-argument form instead of passing concatenated strings.
<?php echo "The sum is " . 1 | 2; // output: "2". Parentheses needed. echo "The sum is ", 1 | 2; // output: "The sum is 3". Fine. ?>
Second, a slightly confusing phenomenon is that unlike passing arguments to functions, the values are evaluated one by one.
With ',' the cursor stops at the beginning every newline, while with '.' the cursor stops after the 0 in the beginning every line (because sleep() returns 0).