调用静态方法非静态(Calling a static method non statically)

2019-11-01 22:53发布

我碰到这样的事情,而且我不知道是怎么打它关闭。 有没有什么好的理由这样做,或避免呢?

class Foo {

  static public function bar() {}

}

someMethod() {

  $instanceOfFoo->bar();

}

Answer 1:

PHP的文件说:

[...]声明为静态属性可以不与一个实例化的类对象(尽管一个静态方法可以)进行访问。 [...]静态属性无法通过使用箭头操作者的对象访问 - >。

在不指定任何特殊的静态方法被调用的-> 。 你一定要避免它,虽然,因为它会导致混乱,以谁的期望读者$obj->meth()是一个非静态方法和Cls::meth()的静态方法。

令人惊讶的这种行为不触发任何错误。 这样做的原因是,一个静态方法,通过被称为$object->method()在内部被转换为className::method()在运行时(与唯一的区别是$this = NULL被设置)。



Answer 2:

您可以拨打下面的特定功能。

Foo::bar();

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

它可以调用与对象的静态功能,但为什么还有那么当你有一个更简单和更清洁的方法。



文章来源: Calling a static method non statically
标签: php static