非静态地调用静态方法

时间:2013-04-02 02:24:35

标签: php static

我遇到过这样的事情,我不知道该怎么做。有没有充分的理由这样做,或者避免它?

class Foo {

  static public function bar() {}

}

someMethod() {

  $instanceOfFoo->bar();

}

2 个答案:

答案 0 :(得分:4)

PHP文档说:

  

[...]声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以)。   [...]无法使用箭头操作符 - >。

通过对象访问静态属性

没有为->调用的静态方法指定任何特殊内容。你绝对应该避免它,因为它会让那些期望$obj->meth()成为非静态方法而Cls::meth()成为静态方法的读者感到困惑。

令人惊讶的是此行为is not triggering出现任何错误。这样做的原因是$object->method()调用的静态方法在运行时被内部转换为className::method()(唯一的区别是$this = NULL已设置)。

答案 1 :(得分:0)

您可以按如下方式调用特定功能。

Foo::bar();

您不必创建一个对象来调用静态函数。基本上我们编写静态函数来调用函数,而不需要定义它的类的实例。

可以使用对象调用静态函数,但为什么在使用更简单,更清晰的方法时也可以这样做。