请解释一下为什么我没有得到以下一行的整个输出:
echo"$x+$y=".$x+$y."</br>";
我只是在没有打印字符串的情况下获得添加的打印。但是这个陈述的输出是完美的:
echo"$x+$y=".($x+$y)."</br>";
谢谢。
答案 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>");
以下是详细情况:
"$x+$y="
更改为"10+7="
"10+7=".$x
导致"10+7=10"
"10+7=10"+$y
求值为"10+7"
,最终为"17"
,因为php会尝试将字符串转换为数字。在此过程中,它从字符串的左侧开始,在您的示例中,它找到10
。接下来找到+
符号,该符号不是数字,这将终止将字符串转换为数字的尝试。但是,已发现的数字(10
)仍然是字符串的数字解释。17
与最后一个字符串<br>
连接在一起,这就被回应了。希望有所帮助, Loddi
答案 2 :(得分:0)
这是由运营商优先于您可以参考的更多细节http://php.net/manual/en/language.operators.precedence.php
对于可见格式,您可以使用
echo '$x+$y='.($x+$y)."</br>";
输出:$ x + $ y = 15