aiz*_*ier 13 php sum concatenation parentheses
我有以下代码:
<?php
$a = 1;
$b = 2;
echo "sum: " . $a + $b;
echo "sum: " . ($a + $b);
?>
Run Code Online (Sandbox Code Playgroud)
当我执行我的代码时,我得到:
2
sum: 3
Run Code Online (Sandbox Code Playgroud)
为什么它无法"sum:"在第一个回声中打印字符串?将附加括在括号中似乎没问题.
这种奇怪的行为是否记录在案?
mgi*_*nbr 19
加法+运算符和连接.运算符都具有相同的运算符优先级,但由于它们是左关联的,因此它们的计算方式如下:
echo (("sum:" . $a) + $b);
echo ("sum:" . ($a + $b));
Run Code Online (Sandbox Code Playgroud)
所以你的第一行首先进行连接,最后得到:
"sum: 1" + 2
Run Code Online (Sandbox Code Playgroud)
(现在因为这是一个数字上下文,你的字符串被转换为一个整数,因此你最终得到了0 + 2,然后给你结果2.)
如果查看列出PHP运算符优先级的页面,您将看到连接运算符.和加法运算符+具有相同的优先级,具有左关联性.这意味着操作从左到右完成,正如代码所示.我们来看看:
$output = "sum: " . $a;
echo $output, "\n";
$output = $output + $b;
echo $output, "\n";
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
sum: 1
2
Run Code Online (Sandbox Code Playgroud)
连接工作,但您尝试将字符串添加sum: 1到数字2.不以数字开头的字符串计算0,因此这相当于0 + 2,这导致2.
正如您在问题中所建议的那样,解决方案是将加法运算括在括号中,以便它们一起执行,然后将这些运算的结果连接起来.
echo "sum: " . ($a + $b);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2828 次 |
| 最近记录: |