为什么这在PHP中合法?
<?php
class Foo {
public function test() {
echo "hello\n";
}
}
Foo::test();
?>
test()是一个非静态函数,但我可以在没有实例的情况下访问它。
答案 0 :(得分:6)
这是合法的,但通常不赞成,直到您在静态调用的方法中引用$this
,这将导致致命的错误。
答案 1 :(得分:5)
我认为这是因为向后兼容性。在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时最好的。
答案 2 :(得分:2)
来自PHP Manual:
静态调用非静态方法 生成E_STRICT级别警告。
答案 3 :(得分:0)
这是有效的,因为您尚未启用E_STRICT错误级别。启用后,PHP将停止让您执行此操作。
答案 4 :(得分:-2)
我不相信你可以访问一个没有该对象实例的类的方法。