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();
});