@Shimpanze

Как достучаться до вложенной функции?

Добрый день!

Как реализовать такую архитектуру? Не могу сообразить...

function func_a( $arg1, $arg2, $arg3 = null ) {
  $summ = $arg1 + $arg2;

  function func_arg( $a1, $a2 ) {
    $output = $GLOBALS['summ'] + $a1 + $a2;
    return $output;
  }
}


Вызов...
print func_a( 3, 5, func_arg( 7, 9 ) );
...не работает. Не видит функцию: func_arg.

Песочница

P.S. Пример синтетический, но я столкнулся с этим в реальном проекте. Как достучаться до вложенной функции в таком случае?

Спасибо!
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Согласен с ответом выше, "код с душком".

В вашему случае функция объявляемая внутри функции всё-равно будет доступна в глобальном неймспейсе, но вызвать её можно будет только после вызова внешней функции. То есть просто можно разделить это на 2 отдельных функции без вложенности.

как вызвать, ничего не меняя
func_a(3, 5); //у нас появляется функция func_arg которую теперь можем вызывать
var_dump(func_arg(7, 9));


для понимания механизмов
var_dump(function_exists('func_arg')); //false
func_a(3, 5);
var_dump(function_exists('func_arg')); //true


лучше разделить функции
function func_a()
{
//
}

function func_arg()
{
//
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
php666
@php666
PHP-макака
Как реализовать такую архитектуру?
это не "архитектура", а жуткий говнокод, за который надо быть по рукам или вообще уволить.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Ответ простой, никогда не делать ниакаких "вложенных функций".
Ответ написан
Комментировать
MrKarton
@MrKarton
Погромист
Что мешает вложенную функцию вынести? И просто из внешней функции(в которую она была вложена) обращаться в уже свободную функцию, которая будет доступна всем?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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