php字符串编号连接搞砸了

时间:2013-04-30 07:48:58

标签: php string concatenation operator-keyword operator-precedence

我在这里得到了一些PHP代码:

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

输出234,

但是当我在“你好”之前加上一个数字11时:

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

它输出1334而不是245(我预期它),为什么会这样?

5 个答案:

答案 0 :(得分:13)

那很奇怪......

但是

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

OR

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

解决问题。


<强> UPDv1:

最后设法得到了正确答案:

'hello' = 0(不包含前导数字,因此PHP假定它为零)。

所以'hello' . 1 + 2简化为'hello1' + 2 2,因为'hello1'中的前导数字也不为零。


'11hello ' = 11(包含前导数字,因此PHP假设它是11位)。

所以'11hello ' . 1 + 2简化为'11hello 1' + 211 + 213


<强> UPDv2:

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

  

该值由字符串的初始部分给出。如果是字符串   从有效的数字数据开始,这将是使用的值。   否则,该值将为0(零)。有效的数字数据是   可选符号,后跟一个或多个数字(可选地包含一个   小数点),后跟可选的指数。指数是一个   'e'或'E'后跟一个或多个数字。

答案 1 :(得分:5)

点运算符与+和 - 具有相同的precedence,这可能会产生意外结果。

技术上回答你的问题...如果你想在连接期间将数字视为数字,只需将它们包在括号中。

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

答案 2 :(得分:4)

你必须在数学运算中使用()

echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334

答案 3 :(得分:1)

你应该检查PHP类型转换表,以便更好地了解幕后发生的事情:http://php.net/manual/en/types.comparisons.php

答案 4 :(得分:1)

如果你讨厌将操作员分配给变量

$var = 1 + 2;

echo 'hello ' . $var . '34';