11

コードを維持しているときに、ループに遭遇しました。ループの最後で、いくつかの変数がNULLso: のように設定されています$var = NULL;。私がマニュアルで理解していることから、NULL は主に PHP コードで比較するものとして意図されています。NULLタイプがなく、文字列でも数値でもないため、出力しても意味がありません。

残念ながら例を示すことはできませんが、NULL 値がコード内のファイルに書き込まれていると思います。私の質問は次のとおりです。$var割り当て後に値があり、それをエコー/書き込みすると出力が生成されますか?

編集: の PHP マニュアル エントリを読みました NULL。これを投稿する必要はありません: http://php.net/manual/en/language.types.null.phpをコメントまたは回答に入力するか、RTM を持っていないことに対して私に反対票を投じてください。ありがとうございました!

4

6 に答える 6

3
[ghoti@pc ~]$ php -r '$i="foo"; print "ONE\n"; var_dump($i); unset($i); print "TWO\n"; var_dump($i); $i=NULL; print "THREE\n"; var_dump($i); print "\n"; if (isset($i)) print "Set.\n"; if (is_null($i)) print "is_null\n";'
ONE
string(3) "foo"
TWO
NULL
THREE
NULL
is_null
[ghoti@pc ~]$ 

の結果はisset()ブール値の false になりますが、変数はまだ定義されています。isset()関数の名前はisnotnull(). :-P

is_null()は、設定されたことのない値に対しても true を返すことに注意してください。

やあPHP。

于 2012-06-22T15:04:26.070 に答える
2

nullPHPの他の値とほとんど同じです(実際には、string、intなどとは異なるデータ型でもあります)。

ただし、重要な違いが1つありisset($var)ます。それは、変数が存在し、null以外の値を持っているかどうかをチェックすることです。

新しい値を割り当てる前に変数をもう一度読み取ることを計画している場合、それunset()は間違った方法ですが、割り当てnullは完全に問題ありません。

php > $a = null;
php > if($a) echo 'x';
php > unset($a);
php > if($a) echo 'x';
Notice: Undefined variable: a in php shell code on line 1
php >

ご覧のとおり、unset()実際には変数が存在しなかったのと同じように削除され、割り当てnullによって特定の値に設定されます(必要に応じて変数が作成されます)。

の便利なユースケースnullは、それが提供されたかどうかを知りたい場合のデフォルトの引数であり、空の文字列、ゼロなども有効です。

function foo($bar = null) {
    if($bar === null) { ... }
}
于 2012-06-22T15:01:02.390 に答える
1

PHPのNullは、変数に値が割り当てられていないことを意味します。

http://php.net/manual/en/language.types.null.php

于 2012-06-22T15:01:58.577 に答える
1

NULL値が含まれていないことを示すために、変数を に設定できます。コードの後の時点で、変数が であるかどうかがチェックされる場合、それは理にかなっていますNULL

変数は、使用されているメモリを解放するために、明示的に NULL に設定される場合があります。これは、変数が大量のメモリを消費する場合に意味があります (この質問を参照してください)。

コードをドライランすると、正確な理由を突き止めることができるかもしれません。

于 2012-06-22T15:44:04.780 に答える
0

提供された情報に基づく null 実装の目的は、変数をクリアすることのようです。

変数を NULL に設定するか、関数unset()を使用して、PHP で変数の設定を解除できます。

unset() は、指定された変数を破棄します。

関数内での unset() の動作は、破棄しようとしている変数のタイプによって異なります。

グローバル化された変数が関数内で unset() されている場合、ローカル変数のみが破棄されます。呼び出し環境の変数は、unset() が呼び出される前と同じ値を保持します。

于 2012-06-22T15:04:19.017 に答える
-1

Null は、それ自体である 1 つの値のみを持つことができる特別なデータ型です。つまり、null はデータ型であるだけでなく、キーワード リテラルでもあります。データ型 null の変数は、変数が値なしで作成されたときに値が割り当てられていない変数です。これは、null の値が自動的に割り当てられます。以前にそのメモリ位置にあったガベージがすべてクリアされるようにします。そうしないと、プログラムがそれを処理しようとする可能性があります

于 2015-09-10T23:26:38.773 に答える