4

次のステートメントがあるとします。

$b = empty($a) ? "null" : "'$a'"

コピーと貼り付けを避けるために、関数に入れたいと思います:

function x($a) {
  return empty($a) ? "null" : "'$a'"
}

だから私はできる:

$b = x($a); // $a is not defined, so PHP complains
$d = x($c); // same with $c

$aしかし、定義されていないため、PHPからエラーが発生します。@演算子を使用する以外に、これを達成する方法はありますか?

編集: x() 内ではなく、x() を呼び出すときにエラーが発生することを参照しています。ご存じのとおり、定義されていないものに対して isset() および empty() を実行でき、PHP は文句を言いません。しかし、何か未定義の関数を呼び出すと、PHP は文句を言います。これが問題です。

4

3 に答える 3

3

まず第一に、これはエラーではなく通知であるため、無効にすることができます。

次に、通知を回避するために、このパラメータを参照渡しとして定義できます。

error_reporting(E_ALL);

function x(&$a) {
    var_dump('inside', $a);
    return empty($a) ? "null" : "'$a'";
}

$a = 4;
var_dump('before', isset($a), isset($c));
$b = x($a);
$d = x($c);
var_dump('after', isset($a), isset($c));

var_dump($b, $d);

出力:

string(6) "before" bool(true) bool(false) 
string(6) "inside" int(4) 
string(6) "inside" NULL
string(5) "after" bool(true) bool(false) 
string(3) "'4'" string(4) "null"
于 2013-07-17T11:07:36.507 に答える
-1

ここhttp://www.php.net/manual/en/functions.arguments.phpに書かれているように、次のようなことができます:

function x($a=NULL) {
   return empty($a) ? "null" : "'$a'"
}
于 2013-07-17T11:40:11.523 に答える