Какая польза от создания функций внутри функций? - PullRequest
1 голос
/ 16 февраля 2010

Я знаю, что можно создать функцию внутри другой функции. Зачем это нужно делать в реальной жизни? (PHP)

function someFunction($var)  
{  
    function anotherFunction()
    {
        return M_PI;
    }

    return anotherFunction();
}

Ответы [ 3 ]

4 голосов
/ 16 февраля 2010

Единственный раз, когда вы действительно захотите определить функцию внутри другой функции, это если вы не хотите, чтобы эта внутренняя функция была доступна для чего-либо, пока не будет вызвана внешняя функция.

function load_my_library() {
  ...

  function unload_my_library() {
  }
}

Единственный раз, когда вам нужно (или вы хотите) unload_my_library быть доступным, это после загрузки библиотеки.

1 голос
/ 16 февраля 2010

Вложенные функции, как правило, никогда не должны использоваться. Классы и публичные / приватные методы решают одни и те же проблемы гораздо более чисто.

Однако функции генерации функций могут быть полезны:

<?php
# requires php 5.3+
function make_adder($a)
{
  return function($b) use($a) {
    return $a + $b;
  };
}

$plus_one = make_adder(1);
$plus_fortytwo = make_adder(42);

echo $plus_one(3)."\n";       // 4
echo $plus_fortytwo(10)."\n"; // 52

?>

Этот пример придуман и глуп, но такого рода вещи могут быть полезны для генерации функций, используемых для сортировки подпрограмм и т. Д.

0 голосов
/ 16 февраля 2010

Я предполагаю здесь, но я считаю, что он используется для передачи функции другой функции для выполнения. Например, вызывая функцию поиска, где вы можете указать функцию обратного вызова, чтобы выполнить сравнение порядка поиска. Это позволит вам включить компаратор в вашу внешнюю функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...