在PHP中访问类的非静态函数

ZZ *_*der 3 php oop class

为什么这在PHP中合法?

<?php
class Foo {
    public function test() {
        echo "hello\n";
    }
}

Foo::test();
?>
Run Code Online (Sandbox Code Playgroud)

test()是一个非静态函数,但我可以在没有实例的情况下访问它.

Mik*_*e B 6

这是合法的,但通常不赞成,直到你引用$this你的静态调用方法,这将引发一个致命的错误.


moz*_*ves 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=34990http://bugs.php.net/bug.php?id=47891.