@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. Пример синтетический, но я столкнулся с этим в реальном проекте. Как достучаться до вложенной функции в таком случае?

Спасибо!
  • Вопрос задан
  • 134 просмотра
Решения вопроса 2
kruslan
@kruslan
Прокидывай в функцию другую функцию и вызывай ее. Что-то типа
func(2, 3, function() { return 5+6; });

Ну и сама функция получится простой:
function func($a, $b, $callback = null) {
  $result = $a + $b;
  if (is_callable($callback)) {
    $result += $callback();
  }
  return $result;
}
Ответ написан
nokimaro
@nokimaro Куратор тега PHP
Согласен с ответом выше, "код с душком".

В вашему случае функция объявляемая внутри функции всё-равно будет доступна в глобальном неймспейсе, но вызвать её можно будет только после вызова внешней функции. То есть просто можно разделить это на 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
Ответ простой, никогда не делать ниакаких "вложенных функций".
Ответ написан
MrKarton
@MrKarton
C#/JS кодер
Что мешает вложенную функцию вынести? И просто из внешней функции(в которую она была вложена) обращаться в уже свободную функцию, которая будет доступна всем?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы