如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();只有在静态地从类外部调用时,它才会反对吗?
发布于 2017-12-07 12:39:56
范围解析运算符或双冒号运算符不只是用于静态调用。
在类中,运算符可以以非静态的方式引用类本身。
这就是您对self::foo()和A::foo()所做的工作;要在类中进行静态调用,需要使用static::<methodName>语句。
看看这里:http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php
发布于 2017-12-07 12:36:30
在类方法中使用A::或self::,称为$this->。来自文档
在PHP7中使用警告,静态调用非静态方法是不可取的,并将生成E_DEPRECATED警告。对静态调用非静态方法的支持在将来可能会被删除。
https://stackoverflow.com/questions/47694982
复制相似问题