没有括号没有得到具体的输出

时间:2013-11-23 05:10:27

标签: php echo quote

请解释一下为什么我没有得到以下一行的整个输出:

echo"$x+$y=".$x+$y."</br>";

我只是在没有打印字符串的情况下获得添加的打印。但是这个陈述的输出是完美的:

echo"$x+$y=".($x+$y)."</br>";

谢谢。

3 个答案:

答案 0 :(得分:5)

Operator precedence 101. +.运算符具有相同的优先级和从左到右的关联性,因此无需大括号,操作将从左到右进行计算。

考虑一下我从你的问题代码中改编的这个例子:

$x = 3;
$y = 5;
echo "$x+$y=" . $x + $y;

双引号内的变量名将被展开(a.k.a.字符串插值),因此评估如下:

echo "3+5=" . 3 + 5;
echo ("3+5=" . 3) + 5; //added braces to demonstrate actual operations order
echo "3+5=3" + 5;
echo 3 + 5; //string evaluated in numeric context is coerced to number¹
echo 8;

在问题的原始代码中,还有一个字符串连接,它将这个结果与另一个字符串连接起来就是这样。

¹来自PHP docs

  

该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。否则,该值将为0(零)。有效数字数据是可选符号,后跟一个或多个数字(可选地包含小数点),后跟可选指数。指数是'e'或'E',后跟一个或多个数字。

当然,您总是可以使用大括号来强制操作优先级,以获得所需的结果。

答案 1 :(得分:1)

您可以重写这样的表达式,以查看评估顺序:((("$x+$y=".$x) + $y)."</br>");

以下是详细情况:

  1. 对字符串进行插值,将"$x+$y="更改为"10+7="
  2. 字符串连接"10+7=".$x导致"10+7=10"
  3. 字符串和数字之间的加法"10+7=10"+$y求值为"10+7",最终为"17",因为php会尝试将字符串转换为数字。在此过程中,它从字符串的左侧开始,在您的示例中,它找到10。接下来找到+符号,该符号不是数字,这将终止将字符串转换为数字的尝试。但是,已发现的数字(10)仍然是字符串的数字解释。
  4. 17与最后一个字符串<br>连接在一起,这就被回应了。
  5. 希望有所帮助, Loddi

答案 2 :(得分:0)

这是由运营商优先于您可以参考的更多细节http://php.net/manual/en/language.operators.precedence.php

对于可见格式,您可以使用

echo '$x+$y='.($x+$y)."</br>";

输出:$ x + $ y = 15