Когда я пытаюсь это сделать:
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, но, давайте объясним!
Объясняя примеры:
функция 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() {}
.
Чтобы объявить что-то вроде «функции b () в области действия (), единственной альтернативой является использование не b()
а ссылка $b()
. Синтаксис будет чем-то вроде function a(){ $b = function() { }; return $b(); }
function a(){ $b = function() { }; return $b(); }
PS: невозможно в 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();