总是告诉我一个递归函数需要命名自己,当一个实例化的类可以使用$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.这样,该值不会一次又一次地赋值给变量.
我不知道为什么这很难看:
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__常量来做到这一点.