【问题标题】:Why do you have to add parentheses to + - operations when concatenating?为什么连接时必须在 + - 操作中添加括号?
【发布时间】:2016-02-02 11:23:51
【问题描述】:

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

下面是一个简化的例子。

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

$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

谁能解释为什么会这样?

【问题讨论】:

  • 简而言之,"Operator Precedence"
  • @MarkBaker 抱歉,尽管运算符的优先级在这里确实发挥了作用,但尚不清楚 OP 为什么会得到描述输出。我检查并得到了相同的结果。既然您显然知道发生了什么,您介意详细说明您的评论吗?谢谢!
  • 关于echo 使用的特别提示。不要串联!而是使用,。例如。 echo "$a + $b = ", $a + $b, "&lt;br&gt;";你再也不会遇到这些问题了。
  • @arkascha - 看起来 Pepo_rasta 在他们的回答中已经很好地解释了它

标签: php operator-precedence


【解决方案1】:

来自马克贝克的link,你可以看到

加法、减法和字符串连接的优先级相同!

echo "$a + $b = ".$a + $b."&lt;br&gt;"; //15

连接第一个字符串文字和 $a 的值,然后将其隐式转换为数字 (10),以便您可以将 $b 添加到它,然后连接最后一个字符串文字。

当你把它放在括号中时,加法被视为数字(15),因此没有字符串的数学运算

【讨论】:

  • 所以 OPs 问题的答案是:“从字符串到数字的隐式类型转换是在评估 + 运算符之前完成的。
  • 这是我仍然不明白的地方。 “10 + 5 = 10”的类型转换应该如何工作?
  • 从 string 到 int 的转换从其中获取第一个数字,然后将它们转换为 int,数字之后的所有内容都被忽略。在这种情况下,10 被识别为数字 ` + 5 = 10` 是字符串的其余部分,因此它被丢弃(阅读 php.net/manual/en/function.intval.php)并且如果第一个字符不是数字(期望 +-)返回零
  • @Pepo_rasta 啊,好的,这是此答案中缺少的重要信息。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多