我发现了一个始终在我的应用程序中产生错误的问题。对于将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中验证函数调用的许多参数有什么好方法?
答案 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
,因为变量肯定是set
。 if (!$a)
会这样做。您必须在范围调用函数中检查不存在的变量,而不是在函数内。即:
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。