在PHP 5中,键入$class::method()
而不是$class->method()
有什么好处?
与任何性能或功能差异一样。或者这只是一种强制代码非PHP4友好的方式,因为完全重写?
答案 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()
调用类的公共标准方法。