解释输出:echo(2)。 (3 *(打印3));

时间:2012-12-06 05:03:08

标签: php

我知道上面的代码输出323

但需要解释如何输出323

任何人都可以解释一下吗?

3 个答案:

答案 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