aizquier aizquier - 3 months ago 24
PHP Question

PHP is confused when adding and concatenating

I have the following code:


$a = 1;
$b = 2;

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


When I execute my code I get:

sum: 3

Why does it fail to print the string
in the first echo? It seems to be fine when the addition is enclosed in parentheses.

Is this weird behaviour anywhere documented?


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.)