func_get_args vs显式参数

时间:2011-02-07 20:16:01

标签: php

我一直没有意识到php函数func_get_args(),现在我已经发现了它,我想在任何地方使用它。与函数定义中的显式参数声明相比,使用func_get_args是否有任何限制?

4 个答案:

答案 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