2012-01-19 16 views
6

「なぜPHPはここでエラーを投げますか?」質問。まあ、これは少し違っています。 「待って:;:PHPが解析エラーを投げないのはなぜですか?

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

私が最初に考えた:に続いて、「彼は偶然そこにある...という貼り付けていなければなりませんうーんどのように恥ずかしい」同僚によって書かれたいくつかのコードを再加工しながら、私は、次のコードを見つけました...このコードが実際に実行される方法はありません。これは構文エラーでなければなりません "。そして、まだ:

$ php -l test.php 
No syntax errors detected 

そして実際、(一見実行すべきではありませんので、多くのPHPのコードのように)それは問題なく生産で実行されます。 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..." 

:だから私は少しテストをしましたか?

答えて

7

http:は(goto文に使用されている)ラベルとして解釈されている(私はPHP 5.3.5を使用しています)、および(簡単にシンタックスハイライトを通して見ることができる)コメントとして//google.com/

Documentation on goto

後藤オペレータはプログラム内の別のセクションにジャンプするために使用することができます。 ターゲットポイントはラベルの後にコロン()を付けて指定し、命令にはgotoとそれに続くターゲットラベルが付きます。

+1

'http:'はラベルで、 '//'はコメントです。私は前にこのトリックを見た。 – Borealid

+0

もちろん。私はPHPが 'goto'を持っているのを知らなかった。トリッキー。 – chesles

+3

「なぜこの地獄のような特徴が、ダムの機能で既に乗っている言語で実装されなければならないのか?リスト。 –

関連する問題