正如 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