可能重复:
我们在 php 中使用对象运算符“->”
$class::method()
在 PHP 5 中,打字而不是的优点是$class->method()
什么?
与任何性能或功能差异一样。或者这只是因为完全重写而强制代码非 PHP4 友好的一种方式?
可能重复:
我们在 php 中使用对象运算符“->”
$class::method()
在 PHP 5 中,打字而不是的优点是$class->method()
什么?
与任何性能或功能差异一样。或者这只是因为完全重写而强制代码非 PHP4 友好的一种方式?
在 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
$class::method()
调用类的静态方法,而$class->method()
调用类的公共标准方法。