你可以在不重复其名称的情况下递归PHP函数吗?

ale*_*lex 12 php recursion

总是告诉我一个递归函数需要命名自己,当一个实例化的类可以使用$this而静态方法可以使用self等.

是否有类似的方法在递归函数中执行此操作而不再指定它(只是为了减少维护)?

显然我可以使用call_user_func__FUNCTION__不变,但我更喜欢不那么丑陋的东西.

Fel*_*ing 10

您可以使用变量函数,并在函数开头(或任何地方)声明一个带有函数名的变量.不需要call_user_func:

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

不要忘记使用真实的函数名称可能对其他人更具可读性:)
(至少提供一个注释,为什么你这样做)


更新:
正如@Alix在他的评论中提到的那样,声明$__name为as 可能是有用的static.这样,该值不会一次又一次地赋值给变量.

  • @alex:使`$ __ name`为静态是有意义的:`static $ self = __FUNCTION __;`. (5认同)

Ali*_*xel 5

我不知道为什么这很难看:

return call_user_func_array(__FUNCTION__, func_get_args());
Run Code Online (Sandbox Code Playgroud)

与:

return call_user_func_array('someFunction', func_get_args());
Run Code Online (Sandbox Code Playgroud)

call_user_func_array()如果您希望减少维护(如果您的函数有[很多/不同数量]参数),您仍然需要使用.

除此之外,我没有看到另一种方式.另外一个静态方法不能引用自身使用self::,只是为了它的类.你还需要使用魔法__METHOD__常量来做到这一点.