来自https://stackoverflow.com/a/55191/547210的扩展
我正在创建一个验证函数来检查字符串变量的多个属性,这些属性可能已设置也可能未设置。(被检查的属性之一)
我试图用这个函数做的是在表单中接收未知数量的参数(见下文),并抑制可能由传递未设置的变量引起的错误。
我validate([ mixed $... ] )
通过使用接收变量func_get_args()
上一篇文章提到可以通过引用传递,现在当变量像这样隐式传递时这可能吗?
问问题
305 次
1 回答
0
如果你传递了一个在调用范围内没有设置的变量,则返回的数组func_get_args()
将在传递变量的位置包含一个NULL
值,并会触发错误。这个错误不是在函数代码本身中触发的,而是在函数调用中触发的。因此,无法从函数代码中抑制此错误。
考虑一下:
function accepts_some_args () {
$args = func_get_args();
var_dump($args);
}
$myVar = 'value';
accepts_some_args($notSet, $myVar);
/*
Ouput:
Notice: Undefined variable: notSet in...
array(2) {
[0]=>
NULL
[1]=>
string(5) "value"
}
*/
如您所见,变量名notSet
出现在错误中,告诉我们错误是在调用者的范围内触发的,而不是在被调用者的范围内。
如果我们想解决这个错误,我们可以这样做:
accepts_some_args(@$notSet, $myVar);
...并在变量名前加上 evil@
运算符,但更好的解决方案是以不同的方式构造我们的代码,这样我们就可以自己进行检查:
function accepts_some_args ($args) {
var_dump($args);
}
$myVar = 'value';
$toPassToFunction = array();
$toPassToFunction[] = (isset($notSet)) ? $notSet : NULL;
$toPassToFunction[] = (isset($myVar)) ? $myVar : NULL;
accepts_some_args($toPassToFunction);
/*
Ouput:
array(2) {
[0]=>
NULL
[1]=>
string(5) "value"
}
*/
于 2012-01-10T22:03:00.980 回答