Возможно ли доступ к внешней локальной переменной в PHP?

Возможно ли получить доступ к внешнему локальному 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" 

Несколько примечаний:

  • Вы должны положить a ; после объявления функции!
  • Вы можете 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 .