issetは複数の引数を取ることができます。
複数のパラメーターが指定されている場合、isset()は、すべてのパラメーターが設定されている場合にのみTRUEを返します。
これはあなたが望むものの反対なので、単純な否定が必要です:
!isset($x, $y, $z, $w)
追加のボーナスはisset
、通常の関数ではなく、未定義の変数に関する通知を発生させないことです。
変数から名前を取得するのは困難です。何らかの方法でそれらすべてをチェックする必要があります。最良かつ最もスケーラブルなソリューションは、変数の名前をキーとして連想配列を使用することだと思います。
function any_null(array $a){
foreach($a as $k => $v) if ($v === null) return $k;
return false;
}
any_null(array('x' => $x, 'y' => $y));
厳密な比較に注意してください(===
)。それ以外false
の場合""
、、、0
およびarray()
も「null」としてカウントされます。
もう1つの解決策は、変数の名前のみを渡し、 $GLOBALS配列を使用することです。ここでは、func_get_argsの呼び出しと組み合わせて、少し冗長な呼び出し規約を取得しました。
function any_null(){
$a = func_get_args();
foreach($a as $k) if (!isset($GLOBALS[$k])) return $k;
return false;
}
any_null('x', 'y', 'z');
ただし、この最後のソリューションには多くの欠点があります。グローバルスコープ内の変数のみをテストでき、標準変数のみをテストできます(配列内の要素やオブジェクトなどはテストできません)。それらの構文は非常に不格好です。