PHP is confused when adding and concatenating

concatenation, parentheses, php, sum

Solution

Both operators the addition `+` operator and the concatenation `.` operator have the same operator precedence, but since they are left associative they get evaluated like the following:

echo (("sum:" . $a) + $b);
echo ("sum:" . ($a + $b));

So your first line does the concatenation first and ends up with:

"sum: 1" + 2

(Now since this is a numeric context your string gets converted to an integer and thus you end up with `0 + 2`, which then gives you the result `2`.)

Problem

I have the following code: ``` <?php $a = 1; $b = 2; echo "sum: " . $a + $b; echo "sum: " . ($a + $b); ?> ``` When I execute my code I get: ``` 2 sum: 3 ``` Why does it fail to print the string `"sum:"` in the first echo? It seems to be fine when the addition is enclosed in parentheses. Is this weird behaviour anywhere documented?

Original source