web-dev-qa-db-ja.com

PHPに変数is_undefinedがあるかどうかを確認します

PHPでは、変数が設定/定義されていないかどうかを確認したいのですが、 変数NULLの設定は設定/定義と見なされます

私はここですべてを認識しています: http://php.net/manual/en/types.comparisons.php isset()、empty()、is_null()を含みます。これらのどれも私が探しているものではないようです。次の例について考えてみます。

<?php 
$myNull = null;
echo 'isset($myNull): "'.isset($myNull).'"<br />';
echo '$myNull value = "'.$myNull . '"<br />';

echo "<br />";

echo 'isset($myUndefined): "'.isset($myUndefined).'"<br />';
echo '$myUndefined value = "'.$myUndefined . '"<br />';
?>

この例は次のようなものを出力します:
isset($ myNull): ""
$ myNull値= ""

isset($ myUndefined): ""
通知: Undefined 変数:C:\ wamp\www\plm\temp4.phpの9行目のmyUndefined
$ myUndefined値= ""

変数が Undefined 通知で上記のように。関数が必要です。「is_undefined」と呼びます。

$myNull = null;
is_undefined($myNull); // is false
is_undefined($myUndefined); // is true

誰でも?前もって感謝します。

16
tjbourke

まだ使用していませんが、「get_defined_vars」は一見の価値があると思います... http://php.net/manual/en/function.get-defined-vars.php =

私はそれを試して、結果をダンプします。

19
cljk

get_defined_vars はそのような仕事の良い候補だと思います:

array_key_exists('myNull', get_defined_vars());

あなたが期待することをする必要があります。

グローバルコンテキストで作業する場合は、次のものも使用できます。

array_key_exists('myNull', $GLOBALS);
9
Alain Tiemblo

Is_undefined関数が必要な場合は、配列を使用しないので、次のようにします。

_function is_undefined(&$test) {
    return isset($test) && !is_null($test);
}
_

したがって、echo isset($myNull);を実行すると、boolean(true)が ""に変換されます。それが値が空白である理由です。画面に表示したい場合はvar_dump(isset($myNull));を実行できます。これはtrueまたはfalseの場合に表示されます。

また、$ myUndefinedのエコーがありますが、まだ設定されていないため、警告が表示されます。あなたがしたいことは:

_if (!empty($myUndefined)) {
    // variable is defined so do something with it
    echo '$myUndefined value = "' . $myUndefined . '"<br />';
} else {
    echo 'Oops, $myUndefined is Undefined!<br />";
}
_

Isset()とis_null()とempty()の概要を以下に示します。

_$foo = null;
// isset($foo) == true;
// empty($foo) == true;
// is_null($foo) == true;

// Notice I don't set $foo2 to anything
// isset($foo2) == false;
// empty($foo2) == true;
// is_null($foo2) throws a notice!

$foo3 = false;
// isset($foo2) == true;
// empty($foo2) == true;
// is_null($foo2) == false;

$foo4 = 1234;
// isset($foo2) == true;
// empty($foo2) == false;
// is_null($foo2) == false;
_
7
chrislondon

compact() を使用することもできます。指定した変数がシンボルテーブルにない場合は空の配列が返され、そうでない場合は変数の名前と値のペアを含む配列が返されます。 、結果をブール値にキャストする

<?php

$myNull = null;

$isDefined = (bool) compact('myNull'); // true

$otherIsDefined = (bool) compact('myUndefined'); // false 
4
Crisp

はい、ジョナサン氏が前述したように、get_defined_vars()ではなくarray_key_exists()+ $ GLOBALSを使用して、未定義の変数をnullに識別できます

$x;  // $x is undefined 
$y=null;  // $y is defined and is NULL type variable with the only null value
$z=[];    // $z is an array object

if( array_key_exists('x', $GLOBALS) && is_null($x) ) echo "\$x exists and is null\n";
if( array_key_exists('y', $GLOBALS) && is_null($y) ) echo "\$y exists and is null\n";
if( array_key_exists('z', $GLOBALS) && is_null($z) ) echo "\$he exists and is null\n";

// output 
$y exists and is null
0
John Yin

OOPを使用している場合は、オーバーロード__isset()を使用してください。この関数は、どこにも定義されていない変数にアクセスしようとしたときに実行されます。例:

 public function __isset($name) {
    echo 'Hello';
 }

したがって、未定義の変数に関連するエラーメッセージや通知は回避されます

0
GGio