Действительно ли возможно получить доступ к внешней локальной переменной в подфункции PHP?
В ниже кода, я хочу к переменной доступа $l
во внутренней функциональной панели. Объявление $l
как global $l
в панели не работает.
function foo()
{
$l = "xyz";
function bar()
{
echo $l;
}
bar();
}
foo();
Вы, вероятно, могли бы использовать Closure, чтобы сделать это ...
Edit: потребовалось некоторое время, чтобы запомнить синтаксис, но вот как это будет выглядеть:
function foo()
{
$l = "xyz";
$bar = function () use ($l)
{
var_dump($l);
};
$bar();
}
foo();
И, запустив скрипт, вы получите:
$ php temp.php
string(3) "xyz"
Пара примечаний:
;
после объявления функции! использовать
переменную по ссылке, с &
перед ее именем: используйте (& $ l)
Для получения дополнительной информации в качестве справки, вы можете взглянуть на эту страницу в руководстве: Анонимные функции
Вы должны использовать ключевое слово использовать
.
$bar = function() use(&$l) {
};
$bar();
В очень старом PHP 5.2 и ранее это не работало. Синтаксис, который у вас есть, - это не замыкание, а определение глобальной функции.
function foo() { function bar() { } }
работает так же, как:
function foo() { include "file_with_function_bar.php"; }
Если вы выполните функцию foo
дважды, PHP пожалуется, что вы пытались переопределить (глобальную) функцию bar
.