2014-10-01 88 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