PHP's Conflicting Operators: Addition and Concatenation
In PHP, an intriguing phenomenon arises when attempting to combine addition and concatenation operations. Let's explore this curious behavior using an example:
<code class="php">$a = 1; $b = 2; echo "sum: " . $a + $b; echo "sum: " . ($a + $b);</code>
Expectedly, the second line prints "sum: 3." However, the first line unexpectedly displays "2" instead of "sum: 2." Why does this occur?
Left Associative Operators with Same Precedence
The key lies in the operator precedence and associativity in PHP. Both addition ( ) and concatenation (.) operators share the same precedence. Consequently, they are evaluated from left to right.
In the first line of our code, the concatenation (.) operator comes first:
<code class="php">"sum: " . $a + $b</code>
This result is then added to $b. So, what we have is:
<code class="php">echo "sum: 1" + 2;</code>
Since this is a numeric context, "sum: 1" is converted to an integer. This leaves us with 0 2, resulting in 2.
When parentheses are introduced in the second line, the addition operator takes precedence. It evaluates the expression within parentheses first, resulting in 3, which is then concatenated with "sum: " to produce the correct output: "sum: 3."
Documenting PHP's Operator Quirks
This peculiar behavior is stated explicitly in the PHP documentation for concatenation and arithmetic operators, emphasizing the significance of associativity when dealing with operators of the same precedence. It's crucial for PHP developers to be aware of these nuances to avoid potential confusion in their code.
The above is the detailed content of Why Does \'sum: \' . $a $b Output 2 in PHP?. For more information, please follow other related articles on the PHP Chinese website!