php连接字符串数学运算

时间:2012-02-01 08:38:56

标签: php concatenation

$a =  'hello' . 3 + 6 + 10;
echo $a; // 16

我希望它是hello19而不是16。

我知道我可以将数学运算放在()中:

$a =  'hello' . (3 + 6 + 10);
echo $a; // hello19

但为什么php会返回16?

提前感谢。

4 个答案:

答案 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