我试图将一个对象属性传递给一个闭包(这是在该对象的方法内),如下所示:
class Entity extends ControllerBase {
private $view;
private $events;
public function print($tid) {
self::loadView($tid);
self::loopView();
return (new StreamedResponse(function() use ($this->events){
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
$ events属性在loopView()方法中实例化.这似乎应该对我有用,但我得到这个错误:
ParseError: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ',' or ')' in ...
Run Code Online (Sandbox Code Playgroud)
它似乎在说它不希望有一个引用的对象use.我不知道为什么这是无效的,经过一些谷歌搜索,我找不到任何引用我的具体问题.
在PHP 7.1.7中,是否可以执行此操作,如果是,那么正确的语法是什么?
您可以$this->events在没有use声明的情况下使用闭包.
从PHP 5.4.0开始,当在类的上下文中声明时,当前类自动绑定到它,使得在函数范围内可以使用$ this.
至于解析错误的原因,如果我们忽略具体$this情况,
function() use ($object->property) { ...
Run Code Online (Sandbox Code Playgroud)
不起作用,因为use将变量从父作用域传递到闭包,而
$object->property不是变量,它是一个表达式.
如果需要引用闭包内的对象属性,则需要use整个对象,或者将属性分配给另一个变量use.但在这种情况下,您不必担心,因为这$this是特殊的.