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


PHP is confused when adding and concatenating

我有以下代码:

<?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添加到数字2 。不以数字开头的字符串的计算结果为 0 ,因此这相当于 0 + 2 ,这会导致 2

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

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

由于您使用语言结构echo因此可以使用逗号将添加与串联分开:

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

按预期工作。