我知道上面的代码输出 323
但需要解释它是如何输出 323
有人可以解释一下吗?
echo 和 print 都旨在表现得更像语言结构而不是函数。因此,它们具有控制流。您的代码中发生的情况是您从语言构造(echo)内部调用 print 。这意味着 print 将在 echo 完成其任务之前首先发送其输出(请记住,您从 echo 内部调用了 print)。
为了更清楚地向您展示发生了什么,它实际上与运算符优先级无关。
echo ('a') . ('b' * (print 'c')); // ca0
// This is the same thing as...
echo 'a' . 'b' * print 'c'; // ca0
请注意,运算符对此处结果输出中的字符顺序没有影响。
print 总是返回 1,所以这里发生的是您对 执行了算术运算'b' * 1
,这是 string b乘以print的返回值。因此,为什么您首先将输出视为 c (在 echo 完成工作之前打印发送的输出),然后是 echo 应该打印的所有内容。
让我通过以下示例进一步详细说明...
echo print 'a' . 'b' . 'c'; // abc1
请注意该输出末尾的 1。这是因为所有 echo 所做的都是输出print的返回值,而不是字符串。相反, print 是提供abc
as 输出的那个(记住 print 能够在 echo 之前发送输出,因为 echo 必须等待处理结构内部的所有内容才能完成)。
这样就更清楚了……
echo (print 'a') . 'b' . 'c'; // a1bc
现在 1 紧跟在 a 之后。
如果您希望 echo 单独发送每个表达式的输出,您可以为要处理并发送到输出的每个表达式提供一个参数......例如:
echo print 'a', 'b', 'c'; // a1bc
echo 2, 3 * print 3; // 233
我希望这对你来说更清楚一点。
原因是(print 3)
优先于以前的运算符。如果你写 `echo (8) 。(7 * (打印 3)); 例如,您将获得 387。
这里
回声(2)。(3 *打印(3));
Step1:(开始执行)
echo (2).(3*print(3)); //Output = ''
第 2 步:(将执行打印操作)
echo (2).(3*1); // Will print 3 and returns 1 as per print function. Output = 3
第三步:(乘法运算)
echo (2).(3); // Multiplication operation willtake place. Output = 3
第四步:(打印数据)
echo (2).(3); //The . Operator will used to concate the strings in php, thus Output = 323
打印具有比回显更高的优先级,因此它先打印 3,然后再打印 2 和 3