【发布时间】:2009-11-17 21:54:58
【问题描述】:
为什么这在 PHP 中是合法的?
<?php
class Foo {
public function test() {
echo "hello\n";
}
}
Foo::test();
?>
test() 是一个非静态函数,但我可以在没有实例的情况下访问它。
【问题讨论】:
为什么这在 PHP 中是合法的?
<?php
class Foo {
public function test() {
echo "hello\n";
}
}
Foo::test();
?>
test() 是一个非静态函数,但我可以在没有实例的情况下访问它。
【问题讨论】:
这是合法的,但通常不被接受,除非您在静态调用的方法中引用 $this,这将引发致命错误。
【讨论】:
我相信这是因为向后兼容。在 PHP4 中,您没有方法的 static 关键字(仍在寻找参考,但到目前为止,这就是我找到的所有 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。
【讨论】:
来自PHP Manual:
静态调用非静态方法 生成 E_STRICT 级别警告。
【讨论】:
这是因为您没有启用E_STRICT 错误级别。一旦启用 PHP 将停止让你这样做。
【讨论】:
我不相信你可以在没有对象实例的情况下访问类的方法。
【讨论】: