Возможно ли доступ к внешней локальной переменной в PHP?
Возможно ли получить доступ к внешнему локальному varialbe в подфункции PHP?
В приведенном ниже коде я хочу получить доступ к переменной $l
во внутренней панели функций. Объявление $l
как global $l
в баре не работает.
function foo()
{
$l = "xyz";
function bar()
{
echo $l;
}
bar();
}
foo();
Ответы
Ответ 1
Возможно, вы могли бы использовать Closure, чтобы сделать это...
Изменить: потребовалось некоторое время, чтобы запомнить синтаксис, но вот как это будет выглядеть:
function foo()
{
$l = "xyz";
$bar = function () use ($l)
{
var_dump($l);
};
$bar();
}
foo();
И, запустив скрипт, вы получите:
$ php temp.php
string(3) "xyz"
Пара примечаний:
- Вы должны положить
;
после объявления функции! - Вы можете
use
переменную по ссылке, с &
перед именем: use (& $l)
Для получения дополнительной информации, в качестве ссылки, вы можете взглянуть на эту страницу в руководстве: Анонимные функции
Ответ 2
Вы должны 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
функций.
Ответ 3
Вы можете прочитать значение по умолчанию:
function(){
return preg_match(
"yourVar = \d+"
, str_file_get_contents(functionFile)
, arrayToPutFieldsValue
);
}
Если Вы будете использовать две функции одновременно - это как кто-то, использующий ложку, и Вы хотите взять еду с этой ложки - Вы потеряете пищу, или кто-то из вас умрет с голоду. В любом случае - вам придется как-то жестко установить указатель. Невозможно получить какое-либо поле из другой функции или класса, не вызывая его к жизни. Функции/методы подобны экземпляру - их нужно вызывать.
Совместное использование общих полей путем доступа к глобальным полям с синхронизированными функциями.