Php static的奇怪之处::调用包含$this的方法
在本例中,我得到了预期的致命错误“致命错误:不在对象上下文中使用$this”Php static的奇怪之处::调用包含$this的方法,php,static,this,self,Php,Static,This,Self,在本例中,我得到了预期的致命错误“致命错误:不在对象上下文中使用$this” class ctis_parent{ public function objFunc(){ var_dump('Called succes'); } public static function call(){ $this->objFunc(); } public function __construct(){ sel
class ctis_parent{
public function objFunc(){
var_dump('Called succes');
}
public static function call(){
$this->objFunc();
}
public function __construct(){
self::call();
}
}
new ctis_parent();
但若从call()方法的定义中删除static关键字都能正常工作,为什么
class ctis_parent{
public function objFunc(){
var_dump('Called succes');
}
public function call(){
$this->objFunc();
}
public function __construct(){
self::call();
}
}
new ctis_parent();
//string 'Called succes' (length=13)
因为您不在对象中时正在使用
$this
。嗯,你不是真的,但是通过静态声明,人们可以:
ctis_parent::call();
其中,$this
将是非法的
请参阅。,因为您不在对象中时正在使用
$this
。嗯,你不是真的,但是通过静态声明,人们可以:
ctis_parent::call();
其中,$this
将是非法的
请参阅。根据定义,静态函数不需要实例化类,因此它无权访问指向当前实例的
$this->
引用。如果实例不存在,则无法指向它。有道理 根据定义,静态函数不需要实例化类,因此它无权访问指向当前实例的$this->
引用。如果实例不存在,则无法指向它。有道理 我知道我在错误的上下文中使用了static,但为什么在第二个示例中它会起作用?@yurisnk:为什么它不应该起作用?在神奇地调用构造函数之后,$this存在,您正在调用它的函数objFunc()@yurisnk:当您从构造函数调用时,您是从一个只能在创建新实例时调用的方法调用的,因此有一个$this
,并调用一个方法(您没有声明为静态的)从实例内部静态地fine@elias-van ootegem这意味着当我们使用static::关键字调用非静态方法时,这相当于使用$this->调用?是的,但:
是所谓的范围解析运算符,所以self::call()
仅表示在self::
范围内调用函数call
。总的来说,为了避免混淆,最好将其留给静力学使用。看到self::nonstaticMethod()
有效,我感到相当惊讶。我以为它不再有用了……我知道我在错误的上下文中使用了static,但为什么在第二个示例中它会起作用?@yurisnk:为什么它不应该起作用?在神奇地调用构造函数之后,$this存在,您正在调用它的函数objFunc()@yurisnk:当您从构造函数调用时,您是从一个只能在创建新实例时调用的方法调用的,因此有一个$this
,并调用一个方法(您没有声明为静态的)从实例内部静态地fine@elias-van ootegem这意味着当我们使用static::关键字调用非静态方法时,这相当于使用$this->调用?是的,但:
是所谓的范围解析运算符,所以self::call()
仅表示在self::
范围内调用函数call
。总的来说,为了避免混淆,最好将其留给静力学使用。看到self::nonstaticMethod()
有效,我感到相当惊讶。我以为它不再是了。。。