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

Posted

技术标签:

【中文标题】PHP在添加和连接时感到困惑【英文标题】:PHP is confused when adding and concatenating 【发布时间】:2012-06-06 03:42:20 【问题描述】:

我有以下代码:

<?php

    $a = 1;
    $b = 2;

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

?>

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

2
sum: 3

为什么在第一个回显中打印字符串"sum:" 失败?加法用括号括起来似乎没问题。

这种奇怪的行为在任何地方都有记录吗?

【问题讨论】:

如果您的问题已经得到解答,您可以接受答案。这标志着问题已解决。 【参考方案1】:

加法+ 运算符和串联. 运算符具有相同的operator precedence,但由于它们是左关联的,因此它们的计算方式如下:

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

所以你的第一行首先进行连接,最后是:

"sum: 1" + 2

(现在因为这是你的string gets converted to an integer 的数字上下文,因此你最终得到0 + 2,然后给你结果2。)

【讨论】:

Technically they have equal precedence 所以一切都取决于关联性。【参考方案2】:

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

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

这给出了以下输出:

sum: 1
2

连接有效,但您随后尝试将字符串sum: 1 添加到数字2。 Strings that don't start with a number evaluate to 0,所以这相当于0 + 2,结果是2

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

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

【讨论】:

【参考方案3】:

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

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

按预期工作。

【讨论】:

以上是关于PHP在添加和连接时感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 和 MongoDB 游标

对android运行时权限感到困惑

在使用 C# 时对设置与 Microsoft Access 数据库的连接感到困惑

在 Firebase JobDispatcher 和 AlarmManager 之间进行选择时感到困惑

对服务器发送的事件感到困惑

链表,对将节点添加到链表头部的函数感到困惑