Можно ли сделать функцию PHP рекурсивной, не повторяя ее имя?

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

Существует ли похожий способ сделать это в рекурсивной функции, не называя его снова (только для сокращения обслуживания)?

Очевидно, я мог использовать call_user_func или __FUNCTION__ постоянный, но я предпочел бы что-то менее ужасное.

12
задан alex 16 May 2013 в 00:07
поделиться

2 ответа

Вы можете сделать используйте переменные functions и объявите переменную с именем функции в начале вашей функции (или где угодно). Нет необходимости в call_user_func :

function test($i) {
   $__name = __FUNCTION__;
   if($i > 5) {
       echo $i. "\n";
       $__name($i-1);
   }
}

Не забывайте, что использование реального имени функции, вероятно, более читабельно для других людей :)
(по крайней мере предоставьте комментарий , почему вы это делаете)


Обновление :
Как @Alix упоминает в своем комментарии, может быть полезно объявить $ __ name как статический . Таким образом, значение не присваивается переменной снова и снова.

10
ответ дан 2 December 2019 в 19:53
поделиться

Я не знаю, почему это уродливо:

return call_user_func_array(__FUNCTION__, func_get_args());

Против:

return call_user_func_array('someFunction', func_get_args());

Вам все равно нужно использовать call_user_func_array () , если вы хотите сократить расходы на обслуживание (если ваши функции имеют [много / другое количество] аргументов).

Кроме этого Я не вижу другого пути . Также статический метод не может ссылаться на себя, используя self :: , только на свой класс. Для этого вам также понадобится магическая константа __ METHOD __ .

5
ответ дан 2 December 2019 в 19:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: