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;
按预期工作。