Intereting Posts
Обновить страницу после отправки формы Написание и редактирование файла конфигурации PHP из HTML-формы? Посмотрите, существует ли значение в группе в регулярном выражении, а затем манипулирует ею в тексте Конфигурация маршрутизатора ZF2 для субдомена с дочерними маршрутами Cookies не отправляются туда и обратно в Opera Как получить IP-адрес пользователя REST Как получить страницу Фото с самыми любимыми и комментариями? PHP блокировать текстовый файл для редактирования? Преобразование результатов запроса PostgreSQL в XML с использованием PHP DOM Автоматически создавать вложенные оглавления на основе тегов заголовка Как я могу получить вызов в PHP? Скопируйте и переименуйте файл в тот же каталог, не удаляя исходный файл делать расширенные классы наследуют статические значения var (PHP)? открыть электронную почту php, используя imap, давая мне эту ошибку Сообщение: imap_open () : Не удалось открыть поток {imap.gmail.com:993/imap/ssl}INBOX Стол во время цикла бок о бок

Как определить локальные функции в PHP?

Когда я пытаюсь это сделать:

function a() { function b() { } } a(); a(); 

Я получаю Cannot redeclare b...
Когда я попытался сделать это:

 function a() { if(!isset(b)) function b() { } } a(); a(); 

Я unexpected ), expected ...
Как я могу объявить функцию как локальную и забыть о возврате? Мне нужна функция, чтобы передать ее array_filter .

Вы можете использовать анонимную функцию в вызове array_filter .

Идея «локальной функции» также называется «функция внутри функции» или « вложенная функция » … Подсказка была на этой странице, анонимная функция , процитированная @ceejayoz и @Nexerus, но, давайте объясним!

  1. В PHP существует только глобальная область для объявлений функций ;
  2. Единственная альтернатива – использовать другую функцию, анонимную .

Объясняя примеры:

  1. функция b() в function a(){ function b() {} return b(); } function a(){ function b() {} return b(); } также является глобальным, поэтому декларация имеет тот же эффект, что и function a(){ return b(); } function b() {} function a(){ return b(); } function b() {} .

  2. Чтобы объявить что-то вроде «функции b () в области действия (), единственной альтернативой является использование не b() а ссылка $b() . Синтаксис будет чем-то вроде function a(){ $b = function() { }; return $b(); } function a(){ $b = function() { }; return $b(); }

PS: невозможно в PHP объявить «статическую ссылку», анонимная функция никогда не будет статичной .

Смотрите также:

  • var functionName = function () {} vs function functionName () {} ( ans )
  • Для чего нужны вложенные функции PHP?

Вы можете попробовать функцию create_function PHP. http://php.net/create_function

 $myfunc = create_function(..., ...); array_filter(..., $myfunc(...)); unset($myfunc); 

Этот метод не требует PHP 5.3+

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

Проверьте следующий пример:

 <?php function a() { static $init = true; if ($init) { function b() { } $init = FALSE; } } a(); a(); 

Альтернативно, проверяя, существует ли функция:

 <?php function a() { if (!function_exists('b')) { function b() { } } } a(); a();