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