PHP类中赋值$this给单字母变量报错:常量表达式含无效操作
解决PHP类中直接用$this初始化属性的报错问题
这个报错的核心原因很明确:PHP在类的属性声明阶段,只允许使用常量表达式来初始化属性值,而$this是动态的对象引用,属于变量范畴,不属于常量表达式,所以直接写private $d = $this;必然会触发错误。
最直接的解决方案:在构造函数中赋值
你可以把属性的初始化逻辑放到类的构造函数里——构造函数是在对象实例化时执行的,这时候$this已经是有效的对象引用了:
class Dclass { private $d; public function __construct() { $this->d = $this; } }
可选的简洁写法(PHP 7.4+)
如果你的PHP版本是7.4及以上,也可以用属性初始化器结合箭头函数实现(不过要注意,此时$d是一个闭包,调用时需要加括号):
class Dclass { private $d = fn() => $this; // 调用时需要执行闭包 public function getSelfReference() { return $this->d(); } }
不过通常来说,第一种构造函数赋值的方式更直观、易维护,是这类场景下的首选方案。
内容的提问来源于stack exchange,提问作者linearSpin
相关产品推荐
相关产品推荐

