Если вы передадите переменную, которая не установлена в вызывающей области, массив, возвращаемый 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"
}
*/