2012-01-19 59 views
6

有很多「爲什麼PHP在這裏拋出一個錯誤?」的問題。那麼,這有點不同。我發現下面的代碼,而返工由同事寫了一些代碼:爲什麼PHP不會拋出解析錯誤?

foreach($arr as $key => $value) {http://google.com/ 
    echo $value; 
    // ... 
} 

我首先想到的:「唔......多麼尷尬的事,他一定不小心粘貼在那裏......」後面:「等一下......這段代碼實際上沒有辦法運行......這應該是一個語法錯誤「。然而:

$ php -l test.php 
No syntax errors detected 

事實上,(這樣似乎不應該跑那麼多的PHP代碼)它運行在生產無故障。所以我做了一些測試:

foreach($arr as $key => $value) {http://google.com/ <-- original, no error 
foreach($arr as $key => $value) {http: <-- also no syntax error 
foreach($arr as $key => $value) {http <-- bingo! "Unexpected T_ECHO..." 

PHP的語法有什麼小小的祕訣是產生這樣奇怪的結果?

(我用PHP 5.3.5)

回答

7

http:被解釋爲一個標籤(其用於goto語句),並且//google.com/爲註釋(這可以很容易地通過語法突出顯示看到) 。

Documentation on goto

其中goto操作者可用於跳轉到程序的另一部分。 目標點由一個標籤後跟一個冒號指定,並且該指令以goto給出,後跟所需的目標標籤。

+1

'http:'是一個標籤,'//'是註釋。我以前見過這個招數。 – Borealid

+0

當然。我不知道PHP有'goto'。棘手。 – chesles

+3

呃。 「爲什麼地獄*做了這個令人沮喪的功能的另一個項目必須用一種已經充斥着愚蠢特徵的語言來實現?」名單。 –

相關問題