我知道上面的代码输出323
但需要解释如何输出323
任何人都可以解释一下吗?
答案 0 :(得分:6)
echo和print都表现得更像语言结构而不是函数。因此,他们有一个控制流。您的代码中发生的是您从语言结构( echo )内部调用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
上执行了算术运算,这是搅拌 b 乘以 print 。因此,为什么你看到输出为c(在echo甚至完成它的工作之前打印发送的输出),首先,然后回应的所有内容应该打印。
让我进一步阐述下面的例子......
echo print 'a' . 'b' . 'c'; // abc1
注意输出结尾处的1。这是因为所有echo都输出了 print 的返回值,而不是字符串。相反,print是提供abc
作为输出的那个(并且记住print能够在echo之前发送输出,因为echo必须等待处理构造内部的所有内容才能完成)。
这使得它更加清晰......
echo (print 'a') . 'b' . 'c'; // a1bc
现在1紧跟在。
之后如果希望echo分别为每个表达式发送输出,则可以为要处理并发送到输出的每个表达式提供一个参数...例如:
echo print 'a', 'b', 'c'; // a1bc
echo 2, 3 * print 3; // 233
我希望能为你澄清一点。
答案 1 :(得分:2)
原因是(print 3)
优先于以前的运营商。如果你写`echo(8)。 (7 *(打印3));例如,你将得到387。
答案 2 :(得分:1)
这里
echo(2)。(3 * print(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
步骤3 :(乘法运算)
echo (2).(3); // Multiplication operation willtake place. Output = 3
步骤4 :(打印数据)
echo (2).(3); //The . Operator will used to concate the strings in php, thus Output = 323
打印比echo更优先,因此它先打印3,后打2和3