Это всегда прослушивало меня, рекурсивная функция должна назвать себя, когда инстанцированный класс может использовать $this
и статический метод может использовать self
и т.д.
Существует ли похожий способ сделать это в рекурсивной функции, не называя его снова (только для сокращения обслуживания)?
Очевидно, я мог использовать call_user_func
или __FUNCTION__
постоянный, но я предпочел бы что-то менее ужасное.
Вы можете сделать используйте переменные functions и объявите переменную с именем функции в начале вашей функции (или где угодно). Нет необходимости в call_user_func
:
function test($i) {
$__name = __FUNCTION__;
if($i > 5) {
echo $i. "\n";
$__name($i-1);
}
}
Не забывайте, что использование реального имени функции, вероятно, более читабельно для других людей :)
(по крайней мере предоставьте комментарий , почему вы это делаете)
Обновление :
Как @Alix упоминает в своем комментарии, может быть полезно объявить $ __ name
как статический
. Таким образом, значение не присваивается переменной снова и снова.
Я не знаю, почему это уродливо:
return call_user_func_array(__FUNCTION__, func_get_args());
Против:
return call_user_func_array('someFunction', func_get_args());
Вам все равно нужно использовать call_user_func_array ()
, если вы хотите сократить расходы на обслуживание (если ваши функции имеют [много / другое количество] аргументов).
Кроме этого Я не вижу другого пути . Также статический метод не может ссылаться на себя, используя self ::
, только на свой класс. Для этого вам также понадобится магическая константа __ METHOD __
.