PHP: доступ к переменной из класса / метода, оба определены внутри одного и того же замыкания - PullRequest
0 голосов
/ 25 октября 2018

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

$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 Ответ

0 голосов
/ 25 октября 2018

С «глобализацией» переменной 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();
});
...