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

时间:2012-08-06 21:38:49

标签: php class

  

可能重复:
  where we use object operator “->” in php

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

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

2 个答案:

答案 0 :(得分:10)

在PHP5中,两者不可互换。

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

PHP允许您使用静态表示法调用非静态方法的唯一原因是PHP 4中的向后兼容性(因为PHP 4没有函数的静态修饰符,或者public / protected / private < / em>的)。如果您静态调用非静态方法,则会收到有关“严格标准”输出的警告,最终可能会因致命错误而失败。

所以答案实际上是按照应该调用的方式调用方法。如果它是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

答案 1 :(得分:0)

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