PHP 中不推荐在类内部调用非静态方法吗?

Cur*_*ous 3 php

正如 PHP 手册所述

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

要检查此声明 -

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

class A{
    public function foo(){
        echo "testing<br/>";
    }
}
A::foo();
Run Code Online (Sandbox Code Playgroud)

已弃用:不应静态调用非静态方法 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();
Run Code Online (Sandbox Code Playgroud)

仅当从类外部静态调用时才弃用它吗​​?

小智 5

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

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

这就是您为 self::foo() 和 A::foo(); 所做的事情;要在类内部进行静态调用,您需要使用static::<methodName>以下语句

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