当调用以下代码时,我很惊讶没有抛出解析错误或给出其他错误,因为此代码看起来不正确。 PHP 中的冒号有多种用途,但是,我在这方面已经偏离了轨道,因为我不知道它适合哪个桶。
代码:
<?php
class ABC {
static function xyz() {
echo "I don't like the alphabet";
}
}
ABC:xyz();
// tucked away in a strange file
function xyz() {
echo "xyz\n";
}
现在显然代码缺少额外的
:
,但奇怪的是它的工作原理就好像没有任何问题一样。
你认为输出会是什么? Parse Error
?对字母表的不友善评论? Undefined Constant
? Partial Paamayim Nekudotayim
?(好吧!不是真的;给经验丰富的 PHP 专家开个玩笑)
但是实际输出是...
xyz
换句话说,代码只用一个冒号运行!但并不像你想象的那样;亲自看看:https://onlinephp.io/c/e88355
有人知道为什么会发生这种情况吗?我能找到的唯一线索是它在 5.2 版本上崩溃了。
现在显然我可以添加
:
并完成它,但我真的很想了解为什么会发生这种情况,因为它提出了一个非常奇怪的错误。那么也许有一个解决方案可以防止此类愚蠢的事情再次发生。
goto
的目标的语句标签。
ABC:xyz();
echo 'foo';
goto ABC;
如果您的脚本中没有
goto ABC
,则该标签将被忽略。
这与
onclick="javascript:xyz()"
在 HTML/JS 中工作的原因相同。许多程序员这样写是因为他们将其与 href="javascript:xyz()"
混淆了(其中 javascript:
是 URI 方案,指示 URI 的其余部分应作为 JS 执行)。但是 onXXX
属性始终包含 JS,在这种情况下 javascript:
是一个被忽略的标签。