Konfliktierende PHP-Operatoren: Addition und Verkettung
In PHP tritt ein faszinierendes Phänomen auf, wenn versucht wird, Additions- und Verkettungsoperationen zu kombinieren. Lassen Sie uns dieses merkwürdige Verhalten anhand eines Beispiels untersuchen:
<code class="php">$a = 1; $b = 2; echo "sum: " . $a + $b; echo "sum: " . ($a + $b);</code>
Erwartungsgemäß wird in der zweiten Zeile „Summe: 3“ ausgegeben. In der ersten Zeile wird jedoch unerwartet „2“ anstelle von „Summe: 2“ angezeigt. Warum passiert das?
Linksassoziative Operatoren mit gleicher Priorität
Der Schlüssel liegt in der Operatorpriorität und Assoziativität in PHP. Sowohl Additions- ( ) als auch Verkettungsoperatoren (.) haben dieselbe Priorität. Folglich werden sie von links nach rechts ausgewertet.
In der ersten Zeile unseres Codes steht der Verkettungsoperator (.) an erster Stelle:
<code class="php">"sum: " . $a + $b</code>
Dieses Ergebnis wird dann zu $b addiert . Wir haben also Folgendes:
<code class="php">echo "sum: 1" + 2;</code>
Da es sich um einen numerischen Kontext handelt, wird „Summe: 1“ in eine Ganzzahl umgewandelt. Damit haben wir 0 2, was 2 ergibt.
Wenn in der zweiten Zeile Klammern eingeführt werden, hat der Additionsoperator Vorrang. Zuerst wird der Ausdruck in Klammern ausgewertet, was zu 3 führt, die dann mit „sum:“ verkettet wird, um die korrekte Ausgabe zu erzeugen: „sum: 3“.
Dokumentation der Operator-Macken von PHP
Dieses eigenartige Verhalten wird in der PHP-Dokumentation für Verkettungs- und arithmetische Operatoren ausdrücklich erwähnt, wobei die Bedeutung der Assoziativität beim Umgang mit Operatoren derselben Priorität hervorgehoben wird. Für PHP-Entwickler ist es wichtig, sich dieser Nuancen bewusst zu sein, um mögliche Verwirrung in ihrem Code zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum bedeutet \'sum: \' ? $a $b Ausgabe 2 in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!