Передача свойства объекта в замыкание в PHP - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь передать свойство объекта в замыкание (которое входит в метод этого объекта), например:

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.Я не знаю, почему это не правильно, и после некоторого поиска в Google, я не мог найти ничего, касающегося моей конкретной проблемы.

В PHP 7.1.7 возможно ли это сделать, и если да, то каков правильный синтаксис?

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете просто использовать $this->events в замыкании без оператора use.

См. "Автоматическое связывание $this" в документации по анонимной функции .

Начиная с PHP 5.4.0, при объявлении в контексте класса текущий класс автоматически связывается с ним, что делает $ this доступным внутри области действия функции.

Например: https://3v4l.org/gYdHp


Что касается причины ошибки синтаксического анализа, если мы проигнорируем конкретный случай $this,

function() use ($object->property) { ...

не будет работать, потому что use передает переменные из родительской области в замыкание, а
$object->property не является переменной, это выражение.

Если вам нужно обратиться к свойству объектавнутри замыкания вам нужно либо use весь объект, либо присвоить свойство другой переменной, которую вы можете use.Но в этом случае вам не нужно беспокоиться об этом, поскольку $this особенный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...