关于php:$class->method() 还是 $class::method()

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

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
where we use object operator “->” in 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中运行):

1
2
3
4
5
6
7
8
9
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()调用类的公共标准方法。