首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中不推荐在类中调用非静态方法?

问在PHP中不推荐在类中调用非静态方法?
EN

Stack Overflow用户
提问于 2017-12-07 12:17:28
回答 2查看 1.8K关注 0票数 3

如PHP手册所述

从PHP 7.0.0开始,静态地调用一个非静态方法通常已经被废弃(即使是从兼容的上下文中调用)。

去查查这份声明-

我在类之外调用一个非静态方法,然后生成错误。

代码语言:javascript
复制
class A{
    public function foo(){
        echo "testing<br/>";
    }
}
A::foo();

弃用:非静态方法A::foo()不应静态调用

但是,当我在类中调用一个非静态方法时,它就不会生成Deprecated error。

代码语言:javascript
复制
class A{
    public function foo(){
        echo "testing<br/>";
    }

    public function Display(){
        A::foo();    //calling a Non-static method inside statically
        self::foo(); //calling a Non-static method inside statically
    }
}
$obj=new A();
$obj->Display();

只有在静态地从类外部调用时,它才会反对吗?

EN

回答 2

Stack Overflow用户

发布于 2017-12-07 12:39:56

范围解析运算符或双冒号运算符不只是用于静态调用。

在类中,运算符可以以非静态的方式引用类本身。

这就是您对self::foo()和A::foo()所做的工作;要在类中进行静态调用,需要使用static::<methodName>语句。

看看这里:http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php

票数 5
EN

Stack Overflow用户

发布于 2017-12-07 12:36:30

在类方法中使用A::或self::,称为$this->。来自文档

在PHP7中使用警告,静态调用非静态方法是不可取的,并将生成E_DEPRECATED警告。对静态调用非静态方法的支持在将来可能会被删除。

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

https://stackoverflow.com/questions/47694982

复制
相关文章

相似问题

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