静态方法中不能使用$this,因为其属于类而非实例,调用时无对象存在,$this无处可指;错误提示为“using $this when not in object context”;应改用self::、static::等静态上下文合法关键字。
HP静态方法里为什么不能用this
因为this指向当前实例对象,而静态方法属于类本身,不依赖任何实例——调用时根本没创建对象,this自然无处可指。
常见错误现象:PHP Fatal error: Using $this when not in object context。只要在static方法里写了$this->xxx,立刻报这个错。
- 静态方法只能访问静态属性(
self::$prop或static::$prop)和静态方法(self::method()) -
$this在构造函数、普通成员方法中才有效;一旦加了static关键字,整个上下文就脱离实例了 - 注意:连
$this的别名static(作为作用域解析符)和$this(作为对象引用)是两回事,别混淆
想在静态方法里访问类内数据怎么办
改用self、static或parent关键字,它们在静态上下文中合法且语义明确。