正如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();
只有在从课堂外静态调用时才会弃用吗?
答案 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警告。支持通话 静态的非静态方法将来可能会被删除。