0

https://stackoverflow.com/a/55191/547210からの拡張
文字列変数のいくつかの属性をチェックするための検証関数を作成しています。これは設定されている場合とされていない場合があります。(チェックされる属性の1つ)
この関数で実行しようとしているのは、フォーム内の不明な数の引数を受け取り(以下を参照)、未設定の変数を渡すことによって発生する可能性のあるエラーを抑制することです。を使用し
て変数を受け取っています 以前の投稿では、参照によって渡すことで可能であると述べていましたが、変数がこのように暗黙的に渡される場合、これは可能ですか?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 に答える