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

时间:2009-11-17 21:54:58

标签: php oop class

为什么这在PHP中合法?

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

Foo::test();
?>

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

5 个答案:

答案 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=34990http://bugs.php.net/bug.php?id=47891时最好的。

答案 2 :(得分:2)

来自PHP Manual

  

静态调用非静态方法   生成E_STRICT级别警告。

答案 3 :(得分:0)

这是有效的,因为您尚未启用E_STRICT错误级别。启用后,PHP将停止让您执行此操作。

答案 4 :(得分:-2)

我不相信你可以访问一个没有该对象实例的类的方法。