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

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

В ниже кода, я хочу к переменной доступа $l во внутренней функциональной панели. Объявление $l как global $l в панели не работает.

function foo()
{
    $l = "xyz";

    function bar()
    {
        echo $l;
    }
    bar();
}
foo();
23
задан Anthony 9 March 2010 в 12:29
поделиться

2 ответа

Вы, вероятно, могли бы использовать Closure, чтобы сделать это ...


Edit: потребовалось некоторое время, чтобы запомнить синтаксис, но вот как это будет выглядеть:

function foo()
{
    $l = "xyz";
    $bar = function () use ($l)
    {
        var_dump($l);
    };
    $bar();
}
foo();

И, запустив скрипт, вы получите:

$ php temp.php
string(3) "xyz"


Пара примечаний:

  • Вы должны поставить ; после объявления функции!
  • Вы можете использовать переменную по ссылке, с & перед ее именем: используйте (& $ l)

Для получения дополнительной информации в качестве справки, вы можете взглянуть на эту страницу в руководстве: Анонимные функции

39
ответ дан 29 November 2019 в 01:45
поделиться

Вы должны использовать ключевое слово использовать .

$bar = function() use(&$l) {
};
$bar();

В очень старом PHP 5.2 и ранее это не работало. Синтаксис, который у вас есть, - это не замыкание, а определение глобальной функции.

function foo() { function bar() { } }

работает так же, как:

function foo() { include "file_with_function_bar.php"; }

Если вы выполните функцию foo дважды, PHP пожалуется, что вы пытались переопределить (глобальную) функцию bar .

7
ответ дан 29 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: