我有以下代码:
<?php
$a = 1;
$b = 2;
echo "sum: " . $a + $b;
echo "sum: " . ($a + $b);
?>
当我执行我的代码时,我得到:
2
sum: 3
为什么"sum:"
在第一个回显中打印字符串失败?当加法用括号括起来时,它似乎很好。
这种奇怪的行为在任何地方都有记录吗?
我有以下代码:
<?php
$a = 1;
$b = 2;
echo "sum: " . $a + $b;
echo "sum: " . ($a + $b);
?>
当我执行我的代码时,我得到:
2
sum: 3
为什么"sum:"
在第一个回显中打印字符串失败?当加法用括号括起来时,它似乎很好。
这种奇怪的行为在任何地方都有记录吗?
两个运算符加法+
运算符和连接.
运算符具有相同的运算符优先级,但由于它们是左关联的,因此它们的评估如下:
echo (("sum:" . $a) + $b);
echo ("sum:" . ($a + $b));
所以你的第一行首先进行连接并最终得到:
"sum: 1" + 2
(现在因为这是一个数字上下文,你的字符串被转换为一个整数,因此你最终得到0 + 2
,然后给你结果2
。)
如果您查看列出PHP 运算符优先级的页面,您会看到连接运算符.
和加法运算符+
具有相同的优先级,具有左关联性。这意味着操作是从左到右完成的,正如代码所示。让我们看一下:
$output = "sum: " . $a;
echo $output, "\n";
$output = $output + $b;
echo $output, "\n";
这给出了以下输出:
sum: 1
2
连接有效,但您随后尝试将字符串添加sum: 1
到 number 2
。不以数字开头的字符串的计算结果为0
,因此这等效于0 + 2
,结果为2
。
正如您在问题中所建议的那样,解决方案是将加法操作括在括号中,以便它们一起执行,然后将这些操作的结果连接起来。
echo "sum: " . ($a + $b);