为什么这在PHP中合法?
<?php
class Foo {
public function test() {
echo "hello\n";
}
}
Foo::test();
?>
Run Code Online (Sandbox Code Playgroud)
test()是一个非静态函数,但我可以在没有实例的情况下访问它.
我相信这是因为向后兼容性.在PHP4中你没有方法的静态关键字(仍然在寻找参考,但到目前为止,这是我发现的所有http://us2.php.net/manual/en/language.oop5.static.php) .这样,PHP4代码仍然可以正常运行.
最好的做法是声明你的静态函数,如果你打开E_STRICT,你会看到关于这个的通知.
error_reporting(E_ALL | E_STRICT);
更新:嗯,这是我发现的最好的http://bugs.php.net/bug.php?id=34990和http://bugs.php.net/bug.php?id=47891.