Для чего нужны вложенные функции PHP? - PullRequest
73 голосов
/ 06 января 2009

В JavaScript очень полезны вложенные функции: замыкания, закрытые методы и все, что у вас есть.

Для чего нужны вложенные функции PHP? Кто-нибудь их использует и для чего?

Вот небольшое расследование, которое я провел

<?php
function outer( $msg ) {
    function inner( $msg ) {
        echo 'inner: '.$msg.' ';
    }
    echo 'outer: '.$msg.' ';
    inner( $msg );
}

inner( 'test1' );  // Fatal error:  Call to undefined function inner()
outer( 'test2' );  // outer: test2 inner: test2
inner( 'test3' );  // inner: test3
outer( 'test4' );  // Fatal error:  Cannot redeclare inner()

Ответы [ 12 ]

0 голосов
/ 14 ноября 2015

Вложенные функции полезны, если вы хотите, чтобы вложенная функция использовала переменную, которая была объявлена ​​в родительской функции.

<?php
ParentFunc();
function ParentFunc()
{
  $var = 5;
  function NestedFunc()
  {
    global $var;
    $var = $var + 5;
    return $var;
  };
  echo NestedFunc()."<br>";
  echo NestedFunc()."<br>";
  echo NestedFunc()."<br>";
}
?>
0 голосов
/ 24 мая 2011

Вложенные функции полезны в Memoization (кэширование результатов для повышения производительности).

<?php
function foo($arg1, $arg2) {
    $cacheKey = "foo($arg1, $arg2)";
    if (! getCachedValue($cacheKey)) {
        function _foo($arg1, $arg2) {
            // whatever
            return $result;
        }
        $result = _foo($arg1, $arg2);
        setCachedValue($cacheKey, $result);
    }
    return getCachedValue($cacheKey);
}
?>
...