Есть ли способ получить доступ к $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();
ОК. Думаю, я вижу, что вы пытаетесь сделать. Вы можете сделать это с помощью классов с использованием глобальных, но не уверены в этом конкретном случае
Я хотел бы упомянуть, что это, возможно, не лучший способ кодирования, поскольку вы определяете функцию внутри другого. Всегда есть лучший вариант, чем делать таким образом.
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 Manual есть некоторые комментарии по этому поводу, и ни один из них не может найти решение.
http://www.php.net/manual/en/language.variables.scope.php#77693
Другой комментарий предполагает, что вложенные функции фактически не «вложены» для реального
http://www.php.net/manual/en/language.variables.scope.php#20407