https://stackoverflow.com/a/55191/547210的延伸
我正在创建一个验证函数来检查字符串变量的几个属性,这些属性可能已设置也可能未设置。 (检查的属性之一)
我试图对函数做的是在表单中接收参数未知数量的参数(见下文),并抑制传递未设置变量可能导致的错误。
我使用validate([ mixed $... ] )
来收到func_get_args()
等变量
上一篇文章提到通过引用传递是可能的,现在这样可以隐式传递变量吗?
答案 0 :(得分: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);
...并使用邪恶的@
运算符作为变量名称的前缀,但更好的解决方案是以不同的方式构造我们的代码,因此我们可以自己进行检查:
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"
}
*/