PHP抑制函数参数中的错误

时间:2012-01-10 21:30:29

标签: php arguments pass-by-reference error-suppression

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

1 个答案:

答案 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"
  }
*/