我遇到过这样的事情,我不知道该怎么做。有没有充分的理由这样做,或者避免它?
class Foo {
static public function bar() {}
}
someMethod() {
$instanceOfFoo->bar();
}
答案 0 :(得分:4)
PHP文档说:
[...]声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以)。 [...]无法使用箭头操作符 - >。
通过对象访问静态属性
没有为->
调用的静态方法指定任何特殊内容。你绝对应该避免它,因为它会让那些期望$obj->meth()
成为非静态方法而Cls::meth()
成为静态方法的读者感到困惑。
令人惊讶的是此行为is not triggering出现任何错误。这样做的原因是$object->method()
调用的静态方法在运行时被内部转换为className::method()
(唯一的区别是$this = NULL
已设置)。
答案 1 :(得分:0)
您可以按如下方式调用特定功能。
Foo::bar();
您不必创建一个对象来调用静态函数。基本上我们编写静态函数来调用函数,而不需要定义它的类的实例。
可以使用对象调用静态函数,但为什么在使用更简单,更清晰的方法时也可以这样做。