$class->method() or $class::method()


$class->method() or $class::method()

可能的重复项:
我们在 PHP 中使用对象运算符"->"

在 PHP 5 中,键入 $class::method() 而不是$class->method()有什么好处?

与任何性能或功能差异一样。或者这只是因为完全重写而强制代码对 PHP4 不友好的一种方式?

在 PHP5 中,两者不可互换。

静态

方法调用的执行速度将比非静态调用快(在多次迭代中),但随后在静态上下文中调用该方法,并且没有对象可用于被调用的方法。

PHP

允许你使用静态符号调用非静态方法的唯一原因是为了在 PHP 4 中向后兼容(因为 PHP 4 没有函数的静态修饰符,或者 public/protected/private)。 如果确实静态调用非静态方法,则会收到有关"严格标准"输出的警告,最终可能会失败并出现致命错误。

因此,答案实际上是按照应该调用的方式调用该方法。 如果是 PHP 5 中的静态方法,则静态调用它Class::method(),如果是公共方法,则使用对象$class->method()调用它。

考虑以下代码(在 PHP 5 中运行):

class Foo {
    protected $bar = 'bar';
    function f() {
        echo $this->bar;
    }
}
echo Foo::f(); // Fatal error: Using $this when not in object context

$class::method()调用类的静态方法,而$class->method()调用类的公共标准方法。