2014-10-01 74 views
0

令人惊讶,这些都是不同的,我不明白是怎么回事:打印功能和括号发生了什么?

var_dump(print'2'); 
echo "<br>"; 
var_dump((print '2')+3); 
echo "<br>"; 
var_dump(print '2'+3); 
echo "<br>"; 
echo '1'.(print '2')+3; 

这里是输出:

2int(1) 
2int(4) 
5int(1) 
214 

我知道,打印功能输出字符串,这个字符串是一个数字,因此它向我展示了一个整数作为一个值,但我不完全理解这里发生了什么,有人请解释它? 为什么+3不会影响第2行?为什么vardump数量不同?

+0

有趣的差异有趣的问题! :) – Sam 2014-10-01 17:07:08

回答

0

对于线#1

print '2' 

打印2并返回一个1值,然后将其var_dumped()作为int(1)

对于线#2

print '2' 

打印2,并返回一个1然后在var_dumped()a之前被添加到3小号int(4)

对于线路#3

print '2'+3 

打印5(的23之和),并返回一个1值,然后将其var_dumped()作为int(1)

用于线#4

(print '2') 

打印2并返回s 1其被添加到3给出4;回波然后输出1遵循的总和(4

1

的结果根据该文件,print

返回,总是。


要你的例子:

  • var_dump(print'2');将打印字符串2和返回/转储整数1
  • var_dump((print '2')+3);将打印字符串2并返回/转储整数1 + 3
  • var_dump(print '2'+3);将打印'2' + 3,其计算结果为5,然后返回/转储整数1
  • echo '1'.(print '2')+3;将打印2,然后与1,print '2'3的总和连接的回音1
1

请参考php docs for print

打印输出传递给它的参数,并始终返回1.

因此下面输出

var_dump(print'2'); 
// outputs two and gives int 1 to vardump 
var_dump((print '2')+3); 
// outputs 2 and adds 3 to retuned 1 to pass 4 to vardump 
var_dump(print '2'+3); 
//prints 2+3=5 and gives 1 to var_dump 
echo '1'.(print '2')+3; 
// prints 2 first then 1 is concatinated with 4 which is sum of 3 and 1 from print