Нужно ли использовать ключевое слово `$this` при использовании замыкания в методе класса?

«Нужно ли использовать ключевое слово `$this` при использовании замыкания в методе класса?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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, оно автоматически становится нестатическим и привязанным к контексту объекта, даже если объявлено внутри статического метода (что вызовет ошибку).