首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$class->method()或$class::method()

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

Stack Overflow用户
提问于 2012-08-06 21:38:49
回答 2查看 1.2K关注 0票数 3

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

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

如在任何性能或功能上的差异。或者这仅仅是因为完全重写而迫使代码非PHP4 4友好的一种方式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-06 21:43:42

在PHP5中,两者是不可互换的。

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

PHP允许使用静态表示法调用非静态方法的唯一原因是为了实现PHP 4中的向后兼容性(因为PHP 4没有函数的静态修饰符,也没有公共/受保护/私有)。如果您确实静态地调用了一个非静态方法,您将得到一个关于“严格标准”输出的警告,最终这可能会导致致命错误。

因此,真正的答案是以它应该被调用的方式调用这个方法。如果它是PHP5中的静态方法,那么将其称为静态Class::method(),如果它是一个公共方法,则使用对象$class->method()调用它。

考虑以下代码(在PHP 5中运行):

代码语言:javascript
运行
复制
class Foo {
    protected $bar = 'bar';

    function f() {
        echo $this->bar;
    }
}

echo Foo::f(); // Fatal error: Using $this when not in object context
票数 11
EN

Stack Overflow用户

发布于 2012-08-06 21:44:12

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11836352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档