3

可能重复:
我们在 php 中使用对象运算符“->”

$class::method()在 PHP 5 中,打字而不是的优点是$class->method()什么?

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

4

2 回答 2

11

在 PHP5 中,两者不可互换。

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

PHP 允许您使用静态表示法调用非静态方法的唯一原因是为了在 PHP 4 中向后兼容(因为 PHP 4 没有用于函数的 static 修饰符,或 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
于 2012-08-06T21:43:42.217 回答
0

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

于 2012-08-06T21:44:12.697 回答