2016-02-02 10 views
5

Ich schrieb ein kleines Programm, als ich auf etwas Seltsames stieß. Wenn ich wollte, dass PHP eine arithmetische Operationen der Addition oder Subtraktion mit einer Echo-Anweisung und das Ergebnis der Operation, die ich Klammern oder die HTML-Seite hinzufügen musste wollte nicht die Operation, sondern nur das Ergebnis darstellen.Warum müssen Sie bei der Verkettung den + - Operationen Klammern hinzufügen?

Unten ist ein reduziertes Beispiel.

ersten Fall (ohne Klammern):

$a = 10; 
$b = 5; 
echo "$a + $b = ".$a + $b."<br>"; // 15 
echo "$a - $b = ".$a - $b."<br>"; // 5 
echo "$a * $b = ".$a * $b."<br>"; // 10 * 5 = 50 
echo "$a/$b = ".$a/$b."<br>"; // 10/5 = 2 
echo "$a % $b = ".$a % $b."<br>"; // 10 % 5 = 0 

zweiten Fall (mit Klammern):

$a = 10; 
$b = 5; 
echo "$a + $b = ".($a + $b)."<br>"; // 10 + 5 = 15 
echo "$a - $b = ".($a - $b)."<br>"; // 10 - 5 = 5 
echo "$a * $b = ".($a * $b)."<br>"; // 10 * 5 = 50 
echo "$a/$b = ".($a/$b)."<br>"; // 10/5 = 2 
echo "$a % $b = ".($a % $b)."<br>"; // 10 % 5 = 0 

Könnte jemand erklären, warum dies geschieht?

+3

In zwei Worten: [ "__Operator Precedence__"] (http: //www.php. net/manual/de/language.operators.precedence.php) –

+1

@MarkBaker Entschuldigung, obwohl der Vorrang von Operatoren sicherlich eine Rolle spielt, ist es unklar, warum das OP die Describe-Ausgabe bekommt. Ich überprüfte und bekam das gleiche Ergebnis. Da Sie anscheinend wissen, was passiert, würden Sie gerne Ihren Kommentar ausarbeiten? Vielen Dank! – arkascha

+0

Ein Hinweis speziell zur Verwendung von 'echo'. Nicht verketten! Verwenden Sie stattdessen ','. Z.B. 'echo" $ a + $ b = ", $ a + $ b,"
";' Sie werden nie wieder auf diese Probleme stoßen. – Yoshi

Antwort

4

von link von Mark Baker können Sie, dass dieselbe Rangfolge sehen

Addition, Subtraktion und String-Verkettung haben!

in echo "$a + $b = ".$a + $b."<br>"; //15

Concatenate die erste Stringliteral und der Wert von $a, dann wandeln implizit an, dass auf eine Zahl (10), so können Sie $b ihm hinzufügen, dann die endgültige Stringliteral verketten.

, wenn Sie es in Klammern gesetzt, die zusätzlich als Nummer behandelt (15) daher keine mathematischen Operationen mit String

+0

erklärt, die Sinn machen :) – Tim8288

+0

So lautet die Antwort auf die OPs Frage: "eine implizite Typkonvertierung von String zu Numeric erfolgt vor der Auswertung der' + ' – arkascha

+0

Was ich noch immer nicht verstehe: Wie sollte eine Typumwandlung von "10 + 5 = 10" in eine numerische Arbeit? – arkascha