Sea*_*ney 2 php symbols operators
当调用以下代码时,我很惊讶没有抛出解析错误或给出其他错误,因为此代码看起来不正确。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";
}
Run Code Online (Sandbox Code Playgroud)
现在显然代码缺少了 extra :
,但奇怪的是它的工作原理就好像没有任何问题一样。你认为输出会是什么?Parse Error
?对字母表的不友善评论?Undefined Constant
?Partial Paamayim Nekudotayim
?(好吧!不是真的;给经验丰富的 PHP 专家开个玩笑)
但实际输出是...
xyz
Run Code Online (Sandbox Code Playgroud)
换句话说,代码只用一个冒号运行!但并不像你想象的那样;亲自看看: https: //onlinephp.io/c/e88355
有谁知道为什么会发生这种情况?我能找到的唯一线索是它在 5.2 版本上崩溃了。
现在显然我可以添加:
并完成它,但我真的想了解为什么会发生这种情况,因为它提出了一个非常奇怪的错误。那么也许有一个解决方案可以防止此类愚蠢的事情再次发生。
冒号还用于可以作为 的目标的语句标签goto
。
ABC:xyz();
echo 'foo';
goto ABC;
Run Code Online (Sandbox Code Playgroud)
如果您的脚本中没有该goto ABC
标签,则该标签将被忽略。
onclick="javascript:xyz()"
这与在 HTML/JS 中工作的原因相同。许多程序员之所以这样写,是因为他们将其与href="javascript:xyz()"
(where javascript:
is the URI schema that indicates the rest of URI should be returned as JS)混淆了。但onXXX
属性总是包含 JS,在本例中javascript:
是一个被忽略的标签。