在PHP中将对象属性传递到闭包中

在PHP中将对象属性传递到闭包中,php,closures,Php,Closures,我试图将对象属性传递到闭包中(该闭包位于该对象的方法中),如下所示: class Entity extends ControllerBase { private $view; private $events; public function print($tid) { self::loadView($tid); self::loopView(); return (new StreamedResponse(function() use ($this->ev

我试图将对象属性传递到闭包中(该闭包位于该对象的方法中),如下所示:

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
中引用对象。我不知道为什么这是无效的,在一些谷歌搜索之后,我找不到任何与我的具体问题相关的东西


在PHP7.1.7中,可以这样做吗?如果可以,正确的语法是什么?

您可以在闭包中使用
$this->events
,而不使用
use
语句

请参阅中的“自动绑定
$this

从PHP5.4.0开始,当在类的上下文中声明时,当前类将自动绑定到它,使$this在函数的作用域内可用

例如:


至于解析错误的原因,如果我们忽略特定的
$this
案例

function() use ($object->property) { ...
不起作用,因为
use
将变量从父范围传递到闭包,并且
$object->property
不是变量,而是表达式


如果需要引用闭包中的对象属性,则需要
使用整个对象,或者将属性指定给另一个可以
使用的变量。但是在这种情况下,您不必担心这一点,因为
$this
是特殊的。

$this->events
传递到一个新变量中,因为
$this
在anymous functionOverst案例中有另一个含义,您可以设置
$evt=$this->events
,然后将其传递给
use()