PHP在添加和连接时感到困惑

我有以下代码:

<?php $a = 1; $b = 2; echo "sum: " . $a + $b; echo "sum: " . ($a + $b); ?> 

当我执行我的代码时,我得到:

 2 sum: 3 

为什么在第一个回显中不能输出string"sum:" ? 当加法被括在圆括号中时似乎很好。

这种奇怪的行为在任何地方logging?

两个运算符都是加+运算符和并置. 运算符具有相同的运算符优先级 ,但由于它们是相关联的,因此它们的计算结果如下所示:

 echo (("sum:" . $a) + $b); echo ("sum:" . ($a + $b)); 

所以你的第一行首先进行连接,结束于:

 "sum: 1" + 2 

(现在,由于这是一个数字上下文,所以你的string被转换成一个整数 ,因此你最终得到0 + 2 ,然后给你结果2

如果您查看列出PHP运算符优先级的页面,您将看到连接运算符. 和加法运算符+具有相同的优先级,具有左结合性。 这意味着操作完成从左到右,正如代码所示。 我们来看看:

 $output = "sum: " . $a; echo $output, "\n"; $output = $output + $b; echo $output, "\n"; 

这给出了以下输出:

 sum: 1 2 

串联工作,但你然后尝试添加stringsum: 1到数字2 。 不以数字开始的string评估为0 ,所以这相当于0 + 2 ,结果为2

解决scheme,就像你在你的问题中所build议的那样,是将加法操作括在括号中,这样它们一起被执行,然后这些操作的结果被连接在一起。

 echo "sum: " . ($a + $b); 

由于您使用语言构造echo您可以使用逗号分隔添加从串联:

 echo "sum: " , $a + $b; 

按预期工作。