0

我遇到了这样的事情,不知道该怎么做。是否有充分的理由这样做或避免这样做?

class Foo {

  static public function bar() {}

}

someMethod() {

  $instanceOfFoo->bar();

}
4

2 回答 2

5

PHP文档说:

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

没有为 . 调用的静态方法指定任何特殊内容->。不过,您绝对应该避免使用它,因为它会导致希望$obj->meth()成为非静态方法和Cls::meth()静态方法的读者感到困惑。

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

于 2013-04-02T04:34:42.580 回答
0

您可以如下调用特定函数。

Foo::bar();

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

用对象调用静态函数是可以的,但是当你有一个更简单、更干净的方法时为什么要这样做。

于 2013-04-02T04:17:06.447 回答