我一直没有意识到php函数func_get_args()
,现在我已经发现了它,我想在任何地方使用它。与函数定义中的显式参数声明相比,使用func_get_args
是否有任何限制?
答案 0 :(得分:12)
除非实际需要,否则不应使用func_get_args
。
如果定义一个函数来获取特定数量的参数,如果在调用时没有提供足够的参数,PHP将引发错误。
如果您通过func_get_args
获取任意数量的参数,则由您专门检查您期望的所有参数是否已传递给您的函数。
同样地,你失去了使用type hinting的能力,你无法提供default values,而且一眼就能更难分辨你的功能所期望的参数。
简而言之,您可以阻止PHP帮助您捕获(可能很难调试)逻辑错误。
function do_stuff(MyClass tmpValue, array $values, $optional = null) {
// This is vastly better...
}
function do_stuff() {
// ... than this
}
即使你想允许可变数量的参数,你也应该尽可能明确地指定参数:
/**
* Add some numbers
* Takes two or more numbers to add together
*/
function add_numbers($num_1, $num_2 /* ..., $num_N */) {
$total = 0;
for ($i = 0; $i < func_num_args(); ++$i)
$total += func_get_arg($i);
return $total;
}
add_numbers(1,2); // OK!
add_numbers(1,2,3); // OK!
add_numbers(1) // Error!
答案 1 :(得分:1)
答案 2 :(得分:0)
我认为自动完成对IDE来说更难,如果不是不可能的话(尽管可能会使用phpdoc @param声明)
编辑:当你只有一个参数时,你可以使用它:一维数组,哪些键无关紧要。然后变得非常方便。
答案 3 :(得分:0)
我所知道的唯一限制是在解析时更难检查东西。请注意,这包括自动化文档工具的解析器,因为函数在函数声明中具有不正确的args