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