PHP - 快速验证函数调用的许多参数的方法

时间:2011-03-10 04:24:53

标签: php

我发现了一个始终在我的应用程序中产生错误的问题。对于将null或空变量传递给函数,PHP通常非常宽松。例如

function do_this($a, $b, $c) {
....
}

一个容易出错的电话可能是

do_this($request['a'], $request['b'], $request['c']);

如果找不到任何密钥,PHP就会默默地传递null。我试过在函数内部使用错误检查,如下所示:

function do_this($a, $b, $c) {
    if (empty($a)) throw new Exception('$a is not defined!');
    if (empty($b)) throw new Exception('$b is not defined!');
    if (empty($c)) throw new Exception('$c is not defined!');
}

当函数需要很多参数时,这很令人头疼。

我可以使用E_STRICT,但是我使用了许多第三方插件并使用Wordpress,所以我会收到其他软件包的警告。

在PHP中验证函数调用的许多参数有什么好方法?

3 个答案:

答案 0 :(得分:1)

首先关闭。你不应该在不检查你的索引的情况下传递值。那非常非常糟糕。

至于你的问题,为什么不定义默认值然后循环变量来打印错误?

function do_this($a = null, $b = null, $c = null) {
   $numargs = func_num_args();
   $arg_list = func_get_args();
   for ($i = 0; $i < $numargs; $i++) {
       if ($arg_list[$i] == null) {
           //fail
       }
   }
}

当然,您不需要所有代码,只是一个例子。

有关详细信息,请参阅此处:http://www.php.net/manual/en/function.func-get-args.php

答案 1 :(得分:0)

  • 您不需要在函数中使用empty,因为变量肯定是setif (!$a)会这样做。
  • 始终可以传递不正确的,无论是否由于调用函数的范围中未设置变量或仅因为值不正确而发生这种情况。在某些时候你需要检查。见PHP function param type best practices
  • 您必须在范围调用函数中检查不存在的变量,而不是在函数内。即:

    if (isset($foo, $bar, $baz)) {
        do_this($foo, $bar, $baz);
    }
    

    如果变量可能不存在,则必须始终执行此操作,这不是特定于将它们作为参数传递给函数。

答案 2 :(得分:0)

args module查看NSPL。它使参数验证变得简单。要从示例中检查函数中的所有参数,您只需添加一行代码:

function do_this($a, $b, $c) 
{
    expectsAll([nonEmpty, int], [$a, $b, $c]);
    // do this...
}

更多示例here