phpconcatenationarithmetic-expressions

Arithmetic operation within string concatenation without parenthesis causes strange result


Consider the following line of code:

<?php
$x = 10;
$y = 7;

echo '10 - 7 = '.$x-$y;
?>

The output of that is 3, which is the expected result of the calculation $x-$y. However, the expected output is:

10 - 7 = 3

My question therefore is, what happened to the string that I'm concatenating with the calculation? I know that in order to produce the result I expected, I need to enclose the arithmetic operation in parenthesis:

<?php
$x = 10;
$y = 7;

echo '10 - 7 = '.($x-$y);
?>

outputs

10 - 7 = 3

But since PHP does not complain about the original code, I'm left wondering what the logic behind the produced output in that case is? Where did the string go? If anyone can explain it or point me to a location in the PHP manual where it is explained, I'd be grateful.


Solution

  • Your string '10 - 7 = ' is being concatenated with $x. Then that is being interpreted as an int which results in 10 and then 7 is subtracted, resulting in 3.

    For more explanation, try this:

    echo (int) ('10 - 7 = ' . 10); // Prints "10"
    

    More information on string to number conversion can be found at http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion

    If the string starts with valid numeric data, this will be the value used