如何调用PHP中的非静态方法,就好像它是静态的一样?

时间:2014-01-26 06:34:41

标签: php oop

请参阅以下代码。我在类bar中定义了一个名为Foo的非静态方法。但我正在使用Foo::bar()语法调用该方法,就好像它是静态的一样。它有效:http://ideone.com/I45zLx

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

Foo::bar();
?>

为什么我没有得到致命的错误,我试图将静态方法作为静态调用?能否请您指出正式的PHP文档,澄清这一点?

2 个答案:

答案 0 :(得分:2)

你不会在这里得到致命的,而是严格的标准通知。

  

严格标准:不应调用非静态方法Foo :: bar()   静态

始终在您测试的任何代码上启用error_reporting(-1);。如果你启用了这个,你可以在你的输出上看到上面的内容。

请参阅文档here

答案 1 :(得分:0)

我认为它会产生警告。可能是E_STRICT。

定义静态方法的主要原因是你不能用$ this对象引用静态函数内的任何其他公共成员。

如果您尝试在静态函数中使用$ this,则会出现致命错误:在不在对象上下文中时使用$ this。

概念是,静态方法是关于限制是否适用以及它在程序执行期间如何处理。