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

PHP在添加和连接时会感到困惑,php,sum,concatenation,parentheses,Php,Sum,Concatenation,Parentheses,我有以下代码: <?php $a = 1; $b = 2; echo "sum: " . $a + $b; echo "sum: " . ($a + $b); ?> 为什么它无法在第一个回显中打印字符串sum:?将加法括在括号中似乎没问题 这种奇怪的行为有没有记录在案?这两种运算符都是加法+运算符和串联运算符。运算符具有相同的属性,但由于它们是左关联的,因此它们的计算如下所示: echo (("sum:" . $a) + $b); echo

我有以下代码:

<?php

    $a = 1;
    $b = 2;

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

?>
为什么它无法在第一个回显中打印字符串sum:?将加法括在括号中似乎没问题


这种奇怪的行为有没有记录在案?

这两种运算符都是加法+运算符和串联运算符。运算符具有相同的属性,但由于它们是左关联的,因此它们的计算如下所示:

echo (("sum:" . $a) + $b);
echo ("sum:" . ($a + $b));
因此,您的第一行首先进行连接,最后得到:

"sum: 1" + 2

现在,由于这是一个数字上下文,因此最终得到0+2,结果为2。

如果查看页面列表,您将看到连接运算符。加法运算符+具有相同的优先级,具有左结合性。这意味着操作是从左到右进行的,正如代码所示。让我们看一下:

$output = "sum: " . $a;
echo $output, "\n";
$output = $output + $b;
echo $output, "\n";
这将提供以下输出:

总数:1 2. 串联可以工作,但是您可以尝试将字符串sum:1添加到数字2中,这等于0+2,结果是2

正如您在问题中所建议的那样,解决方案是将加法操作括在括号中,以便将它们一起执行,然后将这些操作的结果连接起来

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

由于使用了语言构造,因此可以使用逗号将加法与串联分隔开来:

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

正如预期的那样工作。

因此,这完全取决于关联性。如果您的问题已得到回答,您可以接受答案。这标志着问题已经解决。
echo "sum: " , $a + $b;