PHP 7.1.7中对象方法闭包引用自身属性的正确语法?
在PHP 7.1.7中闭包use子句引用对象属性的正确写法
你遇到的这个语法错误是因为PHP 7.1及更早版本不允许在闭包的use子句中直接引用对象的属性(比如$this->events),use只能接受变量,不能直接解析对象属性表达式。
解决方法:先把属性赋值给临时变量
在定义闭包之前,先将$this->events赋值给一个普通变量,再在use中引用这个变量即可。修改后的代码如下:
class Entity extends ControllerBase { private $view; private $events; public function print($tid) { self::loadView($tid); self::loopView(); // 先把对象属性赋值给临时变量 $events = $this->events; return (new StreamedResponse(function() use ($events) { // 这里可以正常使用$events变量了 // ... 你的闭包逻辑 ... })); } }
额外说明(如果后续考虑升级PHP版本)
如果之后能升级到PHP 7.4及以上版本,可以使用箭头函数,箭头函数会自动继承当前作用域的$this,不需要手动use任何变量,代码会更简洁:
return (new StreamedResponse(fn() => { // 这里可以直接使用$this->events // ... 你的闭包逻辑 ... }));
但在你当前使用的PHP 7.1.7版本中,只能通过临时变量的方式解决这个问题。
内容的提问来源于stack exchange,提问作者user151841
相关产品推荐
相关产品推荐

