请参阅以下代码。我在类bar
中定义了一个名为Foo
的非静态方法。但我正在使用Foo::bar()
语法调用该方法,就好像它是静态的一样。它有效:http://ideone.com/I45zLx。
<?php
class Foo
{
public function bar()
{
echo "hello, world\n";
}
}
Foo::bar();
?>
为什么我没有得到致命的错误,我试图将静态方法作为静态调用?能否请您指出正式的PHP文档,澄清这一点?
答案 0 :(得分:2)
你不会在这里得到致命的,而是严格的标准通知。
严格标准:不应调用非静态方法Foo :: bar() 静态
始终在您测试的任何代码上启用error_reporting(-1);
。如果你启用了这个,你可以在你的输出上看到上面的内容。
请参阅文档here
答案 1 :(得分:0)
我认为它会产生警告。可能是E_STRICT。
定义静态方法的主要原因是你不能用$ this对象引用静态函数内的任何其他公共成员。
如果您尝试在静态函数中使用$ this,则会出现致命错误:在不在对象上下文中时使用$ this。
概念是,静态方法是关于限制是否适用以及它在程序执行期间如何处理。