0

来自https://stackoverflow.com/a/55191/547210的扩展
我正在创建一个验证函数来检查字符串变量的多个属性,这些属性可能已设置也可能未设置。(被检查的属性之一)
我试图用这个函数做的是在表单中接收未知数量的参数(见下文),并抑制可能由传递未设置的变量引起的错误。
validate([ mixed $... ] )通过使用接收变量func_get_args()
上一篇文章提到可以通过引用传递,现在当变量像这样隐式传递时这可能吗?

4

1 回答 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 回答