为什么PHP不会抛出解析错误?

jch*_*hes 6 php

有很多"为什么PHP会在这里抛出错误?" 的问题.嗯,这有点不同.我在重新编写同事编写的代码时发现了以下代码:

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

我的第一个想法是:"嗯......多么令人尴尬;他一定是不小心粘贴在那里......"接着是:"等等......这段代码实际上没有办法运行......那应该是语法错误".但是:

 $ php -l test.php
 No syntax errors detected
Run Code Online (Sandbox Code Playgroud)

事实上,(就像那些看似不应该运行的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..."
Run Code Online (Sandbox Code Playgroud)

什么小的PHP语法产生了如此奇怪的结果?

(我使用的是PHP 5.3.5)

Tim*_*per 7

http:被解释为一个标签(其用于goto语句),并且//google.com/为注释(这可以很容易地通过语法突出显示中可以看出).

关于goto的文档:

goto运算符可用于跳转到程序中的另一个部分.目标点由标签后跟冒号指定,指令以goto后跟所需的目标标签.

  • 啊.另一个关于"为什么*地狱*这个令人沮丧的功能必须用一种已经被愚蠢的功能所使用的语言实现?"的项目?名单. (3认同)