在PHP5中,键入$class::method()而不是$class->method()有什么好处?
如在任何性能或功能上的差异。或者这仅仅是因为完全重写而迫使代码非PHP4 4友好的一种方式吗?
发布于 2012-08-06 21:43:42
在PHP5中,两者是不可互换的。
静态方法调用将比非静态调用执行得更快(在许多迭代中),但是然后在静态上下文中调用该方法,被调用的方法没有可用的对象。
PHP允许使用静态表示法调用非静态方法的唯一原因是为了实现PHP 4中的向后兼容性(因为PHP 4没有函数的静态修饰符,也没有公共/受保护/私有)。如果您确实静态地调用了一个非静态方法,您将得到一个关于“严格标准”输出的警告,最终这可能会导致致命错误。
因此,真正的答案是以它应该被调用的方式调用这个方法。如果它是PHP5中的静态方法,那么将其称为静态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-06 21:44:12
$class::method()调用类的静态方法,而$class->method()调用类的公共标准方法。
https://stackoverflow.com/questions/11836352
复制相似问题