Ответ
В PHP для использования $this внутри замыкания (анонимной функции), объявленного в нестатическом методе класса, его необходимо явно передать с помощью конструкции use.
Начиная с PHP 7.4+, $this можно передать напрямую:
class Example {
private $value = 42;
public function getClosure() {
// Явная передача $this в замыкание
return function() use ($this) {
return $this->value; // Доступ к свойству объекта
};
}
}
В версиях до PHP 7.4 требовалось сначала скопировать $this в другую переменную:
public function getClosure() {
$self = $this; // Копирование ссылки на объект
return function() use ($self) {
return $self->value;
};
}
Важное замечание: Если замыкание использует $this, оно автоматически становится нестатическим и привязанным к контексту объекта, даже если объявлено внутри статического метода (что вызовет ошибку).