在PHP中调用非静态方法不是在PHP中弃用?

时间:2017-12-07 12:17:28

标签: php

正如PHP手册所述

  

从PHP 7.0.0开始静态调用非静态方法   通常不赞成使用(即使从兼容的上下文调用)。

检查此陈述 -

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

class A{
    public function foo(){
        echo "testing<br/>";
    }
}
A::foo();
  

不推荐使用:非静态方法A :: foo()不应该静态调用

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

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();

只有在从课堂外静态调用时才会弃用吗?

2 个答案:

答案 0 :(得分:3)

Scope Resolution运算符或双冒号运算符不仅用于静态调用。

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

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

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

答案 1 :(得分:1)

在类方法中使用A::self::,引用为$this->。来自Docs

  

警告在PHP 7中,不推荐静态调用非静态方法,   并将生成E_DEPRECATED警告。支持通话   静态的非静态方法将来可能会被删除。