php string number concatenation messed up

JustinHo picture JustinHo · Apr 30, 2013 · Viewed 35k times · Source

I got some php code here:

<?php
echo 'hello ' . 1 + 2 . '34';
?> 

which outputs 234,

but when I add a number 11 before "hello":

<?php
echo '11hello ' . 1 + 2 . '34';
?> 

It outputs 1334 rather than 245(which I expected it to), why is that?

Answer

BlitZ picture BlitZ · Apr 30, 2013

That's strange...

But

<?php
echo '11hello ' . (1 + 2) . '34';
?>

OR

<?php
echo '11hello ', 1 + 2, '34';
?>

fixing issue.


UPDv1:

Finally managed to get proper answer:

'hello' = 0 (contains no leading digits, so PHP assumes it is zero).

So 'hello' . 1 + 2 simplifies to 'hello1' + 2 is 2, because no leading digits in 'hello1' is zero too.


'11hello ' = 11 (contains leading digits, so PHP assumes it is eleven).

So '11hello ' . 1 + 2 simplifies to '11hello 1' + 2 as 11 + 2 is 13.


UPDv2:

http://www.php.net/manual/en/language.types.string.php

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.