Следующий код работает как положено:
$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
ключевое слово, которое не имеет никакого отношения к моей проблеме здесь).
С «глобализацией» переменной 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();
});
Других решений пока нет …