Yii框架报错:Using $this when not in object context 问题求助
解决「Using $this when not in object context」错误
这个错误的原因很明确——你在静态方法里误用了$this关键字!
先帮你拆解问题:getId()方法被声明为static(静态方法),这类方法属于整个类,而不是类的某个具体实例对象。在静态方法的执行上下文里,根本不存在当前对象实例,自然也就不能用$this来访问实例属性。
针对你的代码,有两种解决方案,取决于你对getId()方法的需求:
方案一:把静态方法改成实例方法
如果getId()不需要是静态的,直接去掉static关键字,改成普通实例方法即可。这样调用时需要先实例化类,才能调用方法:
class ModelFile extends CoreModel{ public $var; public $var2; // 移除static关键字,转为实例方法 public function getId() { $this->var = '123'; } } // 调用示例 $modelInstance = new ModelFile(); $modelInstance->getId();
方案二:将属性改为静态属性(如果必须保留静态方法)
如果getId()必须保持静态,那你需要把要操作的$var也改成静态属性,然后用self::(指向当前类)或者static::(支持后期静态绑定)来访问它:
class ModelFile extends CoreModel{ // 将$var改为静态属性 public static $var; public $var2; public static function getId() { // 使用self::访问静态属性 self::$var = '123'; } } // 调用示例:直接通过类调用静态方法 ModelFile::getId(); // 访问静态属性 echo ModelFile::$var; // 输出123
简单总结一下:静态成员(方法/属性)属于类本身,用类名或self::访问;实例成员属于对象实例,用$this访问,两者不能混着用哦!
内容的提问来源于stack exchange,提问作者Cristal
相关产品推荐
相关产品推荐

