如何构造`print`有效?

时间:2013-12-30 20:54:44

标签: php

我目前正在浏览Zend PHP 5 Certification Practice Test的问题并看到以下内容:

print print('5') + print('4');
// output
// 461

// or

echo '3' + '0.5' , print('2') + 1;
// output 
// 3.531

它是如何工作的? http://php.net/manual/en/function.print.php的说明和示例 没有说清楚......

4 个答案:

答案 0 :(得分:13)

print不是函数,它是一种语言结构。它总是返回1,其优先级低于算术运算符。所以

print print('5') + print('4');

相当于:

print (print ('5' + print '4'));

执行以下步骤:

  1. print 4 - 打印4并返回1
  2. 计算5 + 1,返回6
  3. print 6 - 打印6并返回1
  4. print 1 - 打印1(也返回1,但没有任何结果如此无关紧要)。
  5. 所以

    echo '3' + '0.5' , print('2') + 1
    

    相当于:

    echo (3 + 0.5);
    echo (print (2 + 1));
    

    执行以下步骤:

    1. 计算3 + 0.5,返回3.5
    2. echo 3.5,打印3.5
    3. 计算2 + 1,返回3
    4. print 3,打印3并返回1
    5. echo 1,打印1

答案 1 :(得分:2)

  

print print('5')+ print('4');

首先打印/输出4(从右到左)。语言构造print始终返回1(如果回显/打印则输出),因此print('5') + 1将输出6。然后最后一次打印打印出构造print的返回,即1(如前所述)。所以最终输出为461


  

echo'3'+'0.5',print('2')+ 1;

echo langauge构造中,字符,是串联的。首先'3' + '0.5'被输出,即3.5。然后,与以前一样,print('2') + 1将返回3,并且当回显print时将输出1。所以最终输出为3.531

答案 2 :(得分:1)

“4”打印首先触发,或者“5”打印是否可能依赖于实现。在这种情况下,首先打印'4',其“打印”返回1,似乎已添加到'5'以获得'6'。最后,输出了打印('5')的'1'返回码。

'3'+'0.5'给出'3.5'。之后(逗号排序点),打印'2'+ 1('3'),最后打印返回'1'返回代码。

我不确定我是否认为这对编排和执行顺序的依赖性是良好的编程习惯。如果您需要它进行考试,我怀疑它可能更像是“陷阱”或警告要做什么......

'print'和'echo'的行为略有不同,但我手边没有PHP文本来描述 它们的不同之处。

答案 3 :(得分:1)

首先,print总是返回1.其次,它可以不带括号调用。最后,必须考虑operator precedence

有了这个,您的第一个语句可以解析为以下算术结构:

  1. 评估print('4'):输出4并返回1
  2. 评估print('5') + 1:输出6并返回1
  3. 评估print:输出1
  4. 同样适用于您的第二个陈述,但在此您必须考虑前述运算符优先级,+的值高于,

    1. 评估echo 3 + 0.5:输出3.5
    2. 评估print('2') + 1:输出3并输出print()的返回值,1