PHP automati c привязка $ this, это копия или расширение? - PullRequest
1 голос
/ 29 мая 2020

При использовании анонимной PHP функции, которая определена внутри контекста класса, в документации говорится, что «текущий класс автоматически привязывается к нему, что делает $this доступным внутри области действия функции».

Но я немного запутался в том, что это значит, означает ли это, что анонимная функция имеет копию класса или теперь она является частью класса? Итак, если я использую анонимную функцию для внесения изменений в класс, они останутся в исходном классе, в котором была определена анонимная функция?

1 Ответ

2 голосов
/ 29 мая 2020

$this переменная внутри анонимной функции в PHP не является копией, это привязка, поэтому, если вы измените содержимое $this внутри анонимной функции, это повлияет на родительский класс.

Вы можете проверить это, запустив этот фрагмент:

class Foo
{
    private $test = 1;

    function __construct()
    {
        $func = function() {
            $this->test = 2;
        };
        $func();
        var_dump($this);
    }
};

new Foo();
...