Php 为什么必须在+;-连接时的操作?

Php 为什么必须在+;-连接时的操作?,php,operator-precedence,Php,Operator Precedence,我正在写一个小程序,突然遇到了一些奇怪的事情。 如果我想让PHP用echo语句表示加法或减法的算术运算以及运算结果,我必须添加括号,否则html页面不会显示运算结果,而只显示结果 下面是一个简化的示例 第一种情况(不带括号): $a=10; $b=5; 回声“$a+$b=”.$a+$b.“”;//15 回声“$a-$b=”.$a-$b.“”;//5. 回声“$a*$b=”.$a*$b.“”;//10 * 5 = 50 回声“$a/$b=”.$a/$b.“”;//10 / 5 = 2 echo“$

我正在写一个小程序,突然遇到了一些奇怪的事情。 如果我想让PHP用echo语句表示加法或减法的算术运算以及运算结果,我必须添加括号,否则html页面不会显示运算结果,而只显示结果

下面是一个简化的示例

第一种情况(不带括号):

$a=10;
$b=5;
回声“$a+$b=”.$a+$b.“
”;//15 回声“$a-$b=”.$a-$b.“
”;//5. 回声“$a*$b=”.$a*$b.“
”;//10 * 5 = 50 回声“$a/$b=”.$a/$b.“
”;//10 / 5 = 2 echo“$a%$b=”.$a%$b.“
”;//10 % 5 = 0
第二种情况(带括号):

$a=10;
$b=5;
回声“$a+$b=”($a+$b)。”
“;//10 + 5 = 15 回声“$a-$b=”($a-$b)。“
”;//10 - 5 = 5 回声“$a*$b=”($a*$b)。“
”;//10 * 5 = 50 回声“$a/$b=”($a/$b)。“
”;//10 / 5 = 2 回声“$a%$b=”($a%$b)。“
”;//10 % 5 = 0
有人能解释一下为什么会发生这种情况吗?

从马克·贝克的作品中你可以看到

加法、减法和字符串串联具有相同的优先级

echo“$a+$b=”.$a+$b.“
”//15

将第一个字符串文字与
$a
的值连接起来,然后将其隐式转换为一个数字(10),这样您就可以向其中添加
$b
,然后连接最后一个字符串文字


当你把它放在括号中时,加法被视为数字(15),因此没有用字符串进行数学运算。@MarkBaker对不起,尽管运算符的优先级确实在这里起作用,但不清楚OP为什么会得到描述输出。我检查了一下,得到了同样的结果。既然你显然知道发生了什么,你介意详细说明你的评论吗?谢谢关于使用
echo
的特别提示。不要连接!而是使用
。例如,
echo“$a+$b=”,$a+$b“
你再也不会遇到这些问题了。@arkascha-看起来Pepo_rasta在他们的回答中已经很好地解释了这一点,所以OPs问题的答案是:“从字符串到数字的隐式类型转换是在计算
+
运算符之前完成的。这是我仍然不理解的。如何将“10+5=10”的类型转换为数字作品?从字符串到int的转换从字符串中提取第一个数字,然后将其转换为int,数字之后的所有内容都将被忽略。在这种情况下,
10
被识别为数字,`+5=10`是字符串的其余部分,因此它被抛出(读取),如果第一个字符不是数字(除了
+
-
),则为零returned@Pepo_rasta啊,好的,这是这个答案中缺失的重要信息。谢谢
$a = 10;
$b = 5;
echo "$a + $b = ".$a + $b."<br>"; // 15
echo "$a - $b = ".$a - $b."<br>"; // 5
echo "$a * $b = ".$a * $b."<br>"; // 10 * 5 = 50
echo "$a / $b = ".$a / $b."<br>"; // 10 / 5 = 2
echo "$a % $b = ".$a % $b."<br>"; // 10 % 5 = 0
$a = 10;
$b = 5;
echo "$a + $b = ".($a + $b)."<br>"; // 10 + 5 = 15
echo "$a - $b = ".($a - $b)."<br>"; // 10 - 5 = 5
echo "$a * $b = ".($a * $b)."<br>"; // 10 * 5 = 50
echo "$a / $b = ".($a / $b)."<br>"; // 10 / 5 = 2
echo "$a % $b = ".($a % $b)."<br>"; // 10 % 5 = 0