我目前正在浏览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的说明和示例 没有说清楚......
答案 0 :(得分:13)
print
不是函数,它是一种语言结构。它总是返回1
,其优先级低于算术运算符。所以
print print('5') + print('4');
相当于:
print (print ('5' + print '4'));
执行以下步骤:
print 4
- 打印4
并返回1
。5 + 1
,返回6
。print 6
- 打印6
并返回1
print 1
- 打印1
(也返回1,但没有任何结果如此无关紧要)。所以
echo '3' + '0.5' , print('2') + 1
相当于:
echo (3 + 0.5);
echo (print (2 + 1));
执行以下步骤:
3 + 0.5
,返回3.5
echo 3.5
,打印3.5
2 + 1
,返回3
print 3
,打印3
并返回1
。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。
有了这个,您的第一个语句可以解析为以下算术结构:
print('4')
:输出4并返回1 print('5') + 1
:输出6并返回1 print
:输出1 同样适用于您的第二个陈述,但在此您必须考虑前述运算符优先级,+
的值高于,
:
echo 3 + 0.5
:输出3.5 print('2') + 1
:输出3并输出print()
的返回值,1