繁体   English   中英

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;

按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM