PHP подавляет ошибки в параметрах функций - PullRequest
0 голосов
/ 11 января 2012

Расширение от https://stackoverflow.com/a/55191/547210
Я создаю функцию проверки, чтобы проверить несколько атрибутов строковых переменных, которые могут быть или не быть установлены. (Один из атрибутов который проверен)
То, что я пытаюсь сделать с функцией - это получить аргументы с неизвестным числом аргументов в форме (см. Ниже) и подавить ошибки, которые могут быть вызваны передачей неустановленной переменной.
Я получаю переменные типа validate([ mixed $... ] ), используя func_get_args()
В предыдущем посте упоминалось, что это было возможно путем передачи по ссылке, теперь это возможно, когда переменные передаются неявно, как это?

1 Ответ

0 голосов
/ 11 января 2012

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