2012-11-01 101 views
18

任何人都可以告訴下面表達式的內部過程嗎?爲什麼「echo'2'。print(2)+ 3」print 521?

<?php echo '2' . print(2) + 3; ?> 
// outputs 521 
+2

什麼是downvotes?其中4人並沒有提供任何理由。 –

+1

這樣的代碼不應該寫在任何健全的情況下...... :)這是矩陣勺子彎曲代碼。 – CodeAngry

+1

將標題從'什麼'改爲'爲什麼......'可能會降低收益。你的問題是一個有趣的問題。 – StuartLC

回答

6

回聲一個連接字符串組成:

字符串「2」 功能打印(「2」),這將返回true,它獲取字符串化至1 字符串的結果「3」

現在

,操作順序是真的很有趣這裏,不能與521都結束了!讓我們嘗試一個變體,找出發生了什麼問題。

回聲2'.print(2)+ 3; 這產生521

PHP是解析的是,然後,如:

回波 '2'。 (打印('2')+'3')) 賓果!左側的打印會首先評估,打印「5」,這讓我們

回聲「1」。打印('2') 然後評估左側打印,所以我們現在打印'52',讓我們留下

echo'1'。 '1'; 成功。 521.

我會強烈建議不要附和打印的結果,也沒有印刷回聲的結果。這樣做首先是非常荒謬的。

+0

這是一個可怕的答案。 –

16

print不是一個函數,所以括號不會像你想象的那樣工作。它取表達式(2) + 35)的值並輸出它。它返回1本身,它連接到'2',然後echo ed。

+3

它首先評估所有的表達式。 'print'是一個在評估時輸出一個值的表達式。所以它在'echo'之前輸出。 – deceze

3

首先加入2和3完成,這導致5和被輸出。

下一頁打印總是返回1。返回值與2連接得到21,然後回顯。

6

print(2) + 3將導致5(這是一樣的print (2 + 3)print 2+3。因爲打印實際上不是在這種情況下的函數,括號大多是毫無意義的。要注意的最後一件事是,print獲取echo之前評估。

輸出到目前爲止是:5

echo '2' . print將導致21,因爲印刷始終返回1

輸出現在是: '521'

+0

+1爲您的優秀說明... – mrsrinivas

相關問題