PHP: доступ к переменной из класса / метода, оба определены в одном и том же замыкании

Следующий код работает как положено:

$b = 42;
var_dump("b: " . $b);

class A
{
    function foo()
    {
        global $b;
        var_dump("b: " . $b);
    }
}

$instance = new A();
$instance->foo();

foo метод может получить доступ $b благодаря global ключевое слово.

Однако, если я перенесу все это в закрытие, $b больше не является "глобальной" переменной, и она не работает (с или без global заявление):

call_user_func(function () {
    $b = 42;
    var_dump("b: " . $b);

    class A
    {
        function foo()
        {
            global $b;
            var_dump("b: " . $b);
        }
    }

    $instance = new A();
    $instance->foo();
});

Как я могу отредактировать этот код так, чтобы метод имел доступ к переменным "верхнего уровня закрытия" (не глобальным)?

Я не смог найти тот же вопрос о SO, не стесняйтесь закрыть его, если есть дубликат (не что-то о use ключевое слово, которое не имеет никакого отношения к моей проблеме здесь).

1 ответ

Решение

С "глобализацией" переменной var $b до сохранения значения в ней она работает нормально для меня. Фрагмент здесь:

call_user_func(function () {
    global $b;
    $b = 42;
    var_dump("b: " . $b);

    $instance = new class
    {
        function foo()
        {
            global $b;
            var_dump("b: " . $b);
        }
    };

    $instance->foo();
});
Другие вопросы по тегам