PHP串联字符串和算术运算

seb*_*ian 6 php programming-languages weak-typing

我不久前开始学习PHP,我遇到了这个问题:

<?php

$a = 1;
$b = 2;

echo "$a * $b  = " . $a * $b;
echo "<br />";

echo "$a / $b  = " . $a / $b;
echo "<br />";

echo "$a + $b  = " . $a + $b;
echo "<br />";

echo "$a - $b  = " . $a - $b;
echo "<br />";
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

1 * 2 = 2
1 / 2 = 0.5
3
-1
Run Code Online (Sandbox Code Playgroud)

输出中的最后两行不是我所期望的.

为什么是这样?这些表达式是如何评估的?我正在努力更好地理解这门语言.

nic*_*ckb 8

发生这种情况是因为连接运算符的优先级高于加法或减法运算符,但乘法和除法的优先级高于连接.

那么,你真正执行的是:

echo ("$a + $b  = " . $a) + $b;
echo ("$a - $b  = " . $a) - $b;
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,这变成了:

"1 + 2 = 1" + $b
Run Code Online (Sandbox Code Playgroud)

哪个PHP尝试转换"1 + 2 = 1"为数字(因为类型杂耍)并得到1,将表达式转换为:

1 + 2
Run Code Online (Sandbox Code Playgroud)

这就是你得到3的原因.相同的逻辑可以应用于减法条件.

相反,如果在计算周围加上括号,您将获得所需的输出.

echo "$a + $b  = " . ($a + $b);
echo "$a - $b  = " . ($a - $b);
Run Code Online (Sandbox Code Playgroud)

  • 另一个解决方案是不连接,但在调用echo时使用多个参数.`echo"$ a + $ b =",$ a + $ b;` (2认同)