Sobes.tech
Back to questions
Junior — Middle
98

Обязательно ли применять ключевое слово this в методе класса при создании замыкания внутри него?

Companies where asked
АО Тривио

Answer from AI

sobes.tech AI

В PHP при создании замыкания (Closure) внутри метода класса ключевое слово this не обязательно применять явно, если замыкание объявлено внутри метода и не использует use. Внутри такого замыкания this доступен автоматически, начиная с PHP 5.4.

Однако, если замыкание создаётся вне контекста объекта или передаётся как callback, чтобы получить доступ к свойствам и методам объекта, нужно либо использовать use ($this), либо объявить замыкание как метод класса.

Пример:

class MyClass {
    private $value = 10;

    public function getClosure() {
        return function() {
            return $this->value; // $this доступен без use
        };
    }
}

$obj = new MyClass();
$closure = $obj->getClosure();
echo $closure(); // Выведет 10

Если же замыкание создаётся вне метода, нужно явно передать $this:

$closure = function() use ($this) {
    return $this->value;
};