Есть ли способ получить доступ к $foo
из inner()
?
function outer()
{
$foo = "...";
function inner()
{
// print $foo
}
inner();
}
outer();
Есть ли способ получить доступ к $foo
из inner()
?
function outer()
{
$foo = "...";
function inner()
{
// print $foo
}
inner();
}
outer();
PHP < 5.3 не поддерживает замыкания, поэтому вам нужно либо передать $foo в inner(), либо сделать глобальный глобальный foo как внутри external(), так и inner() (BAD).
В PHP 5.3 вы можете сделать
function outer()
{
$foo = "...";
$inner = function() use ($foo)
{
print $foo;
};
$inner();
}
outer();
outer();
Или мне не хватает чего-то более сложного, что вы пытаетесь сделать?
function outer()
{
$foo = "...";
function inner($foo)
{
// print $foo
}
inner($foo);
}
outer();
edit Хорошо, я думаю, я вижу, что вы пытаетесь сделать. Вы можете сделать это с помощью классов с использованием глобальных, но не уверены в этом конкретном случае
Я хотел бы упомянуть, что это, возможно, не лучший способ сделать кодирование, поскольку вы определяете функцию внутри другого. Всегда есть лучший вариант, чем делать таким образом.
function outer()
{
global $foo;
$foo = "Let us see and understand..."; // (Thanks @Emanuil)
function inner()
{
global $foo;
print $foo;
}
inner();
}
outer();
Это выведет: -
Let us see and understand...
Вместо того, чтобы писать этот путь, вы могли бы написать следующий фрагмент кода: -
function outer()
{
$foo = "Let us see improved way...";
inner($foo);
print "\n";
print $foo;
}
function inner($arg_foo)
{
$arg_foo .= " and proper way...";
print $arg_foo;
}
outer();
Этот последний фрагмент кода выводит: -
Let us see improved way... and proper way...
Let us see improved way...
Но, наконец, вы всегда будете решать, какой процесс вы собираетесь использовать. Поэтому надеюсь, что это поможет.
Я знаю, что это можно сделать с помощью классов, однако с автономными функциями я был уверен, что вы не сможете выполнить поиск без установки общедоступной/частной переменной.
Но единственный возможный способ, с которым я могу думать (не испытывая этого типа вещей), - передать foo поверх внутреннего, делая эхо или печать.:)
Я не думаю, что это возможно.
В руководстве PHP есть несколько комментариев по этому поводу, и ни один из них не может найти решение.
http://www.php.net/manual/en/language.variables.scope.php#77693
Другой комментарий предполагает, что вложенные функции фактически не "вложены" для реальных
http://www.php.net/manual/en/language.variables.scope.php#20407