我试图将对象属性传递到闭包中(位于该对象的方法内),如下所示:
class Entity extends ControllerBase {
private $view;
private $events;
public function print($tid) {
self::loadView($tid);
self::loopView();
return (new StreamedResponse(function() use ($this->events){
...
}
}
}
$events 属性在中实例化loopView()
方法。这似乎对我有用,但我收到此错误:
ParseError: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ',' or ')' in ...
它似乎在说它不希望有一个对象被引用use
。我不知道为什么这是无效的,经过一番谷歌搜索后,我找不到任何涉及我的具体问题的内容。
在 PHP 7.1.7 中,是否可以这样做,如果可以,正确的语法是什么?
你可以只使用$this->events
在闭包中没有use
陈述。
请参阅“自动绑定$this
" in 匿名函数文档.
从 PHP 5.4.0 开始,当在类的上下文中声明时,当前类会自动绑定到它,从而使 $this 在函数的作用域内可用。
例如:https://3v4l.org/gYdHp
至于解析错误的原因,如果我们忽略具体的$this
case,
function() use ($object->property) { ...
不起作用,因为use
passes 变量从父作用域进入闭包,并且
$object->property
不是变量,而是表达式。
如果您需要引用闭包内的对象属性,您需要use
整个对象,或者将属性分配给另一个变量,您可以use
。但在这种情况下你不必担心,因为$this
很特别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)