$a = 'hello' . 3 + 6 + 10;
echo $a; // 16
我希望它是hello19而不是16。
我知道我可以将数学运算放在()中:
$a = 'hello' . (3 + 6 + 10);
echo $a; // hello19
但为什么php会返回16?
提前感谢。
答案 0 :(得分:1)
在PHP中,.
和+
都有precedence,并且都是左关联的。
结果
'hello' . 3 + 6 + 10;
评估为
('hello' . 3) + 6 + 10;
= 'hello3' + 6 + 10
= ('hello3' + 6) + 10 // String 'hello3' when interpreted as a number gives 0
// as it starts with a non-digit.
= 6 + 10
= 16
答案 1 :(得分:0)
这种情况正在发生,因为当跟随数学+操作时,'hello' . 3
被视为0。
使用括号时,首先计算总和,然后将数字转换为字符串并与'hello'
连接
答案 2 :(得分:0)
首先看一下:
$a = 'hello' . 3;
echo (int)$a; //echoes 0
那是因为hello3
以字母而不是数字开头而且php将其转换为整数为零。所以0+6+10
很明显16。
第二个代码 first 计算大括号中的3 + 6 + 10
,然后用{19}的结果对hello
进行补充
答案 3 :(得分:0)
在PHP的运算符precedence and associativity之后,您可以将表达式重写为等效表达式,如下所示:
'hello' . 3 + 6 + 10; <==>
('hello' . 3) + 6 + 10; <==>
((('hello' . 3) + 6) + 10);
如果我们评估那个表达式,就像PHP那样:
((('hello' . 3) + 6) + 10); =
(('hello3' + 6) + 10); =
((0 + 6) + 10)); =
(6 + 10); =
16