-1

我知道上面的代码输出 323

但需要解释它是如何输出 323

有人可以解释一下吗?

4

3 回答 3

6

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 是提供abcas 输出的那个(记住 print 能够在 echo 之前发送输出,因为 echo 必须等待处理结构内部的所有内容才能完成)。

这样就更清楚了……

echo (print 'a') . 'b' . 'c'; // a1bc

现在 1 紧跟在 a 之后。

如果您希望 echo 单独发送每个表达式的输出,您可以为要处理并发送到输出的每个表达式提供一个参数......例如:

echo print 'a', 'b', 'c'; // a1bc
echo 2, 3 * print 3; // 233

我希望这对你来说更清楚一点。

于 2012-12-06T05:36:13.620 回答
2

原因是(print 3)优先于以前的运算符。如果你写 `echo (8) 。(7 * (打印 3)); 例如,您将获得 387。

于 2012-12-06T05:19:27.247 回答
1

这里

回声(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

于 2012-12-06T05:17:30.253 回答