0

次のコードを見てください。

 <?php 
   $a = 20;
   $a= NULL;  //or unset($a)
   if(isset($a))
   {
      print("hi");
   }
   else
   {
       echo "not initiated";
   }
   if(isset($b))  //$b is a variable which is not initialized
   {
       print("hi");
   }
   else
   {
       echo "not initiated";
   }

?>

未設定で適用すると、同じ結果が得られます。

では、NULLを割り当てることと未設定を割り当てることの違いは何ですか?

4

7 に答える 7

7

以下に示すように、どちらも標準の比較操作でほぼ同じように動作します。

使用unset()されなくなったが、参照がまだ他の場所に保持されているためにGCによって解放できない大きなオブジェクト/配列を解放するために使用します。

-------------------------------------------------------------------------------
|   Expression     | gettype()  | empty()  | is_null()  | isset()  | boolean  |
-------------------------------------------------------------------------------
| $x = "";         | string     | TRUE     | FALSE      | TRUE     | FALSE    |
| $x = null        | NULL       | TRUE     | TRUE       | FALSE    | FALSE    |
| var $x;          | NULL       | TRUE     | TRUE       | FALSE    | FALSE    |
| $x is undefined  | NULL       | TRUE     | TRUE       | FALSE    | FALSE    |
-------------------------------------------------------------------------------
于 2012-10-12T13:10:15.657 に答える
4

誰かがunset()から述べているように

unset()は、その名前が示すとおりに実行します。変数の設定を解除します。即時のメモリ解放を強制することはありません。PHPのガベージコレクターは、適切と判断されたときにそれを実行します。意図的に、これらのCPUサイクルは必要ないので、またはスクリプトがメモリを使い果たす前に、最初に発生したものは何でもです。

$ whatever=nullを実行している場合; 次に、変数のデータを書き換えています。メモリの解放/縮小が速くなる可能性がありますが、CPUサイクルを本当に必要とするコードからより早く盗む可能性があり、その結果、全体的な実行時間が長くなります。

于 2012-10-12T12:55:49.483 に答える
2

FORM PHP DOC isset

変数が設定されていて、NULLでないかどうかを判別します。

変数がunset()で設定解除されている場合、その変数は設定されなくなります。NULLに設定されている変数をテストする場合、isset()はFALSEを返します。また、NULLバイト( "\ 0")はPHPのNULL定数と同等ではないことに注意してください。

未設定時

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

issetを使用しているため、開始されたかどうかは関係ありません。開始された変数とnull値の両方に対してfalseが返されます。

于 2012-10-12T12:55:13.537 に答える
2

を使用してisset()います。マニュアルによるとisset()、変数が設定されていてNULLでないかどうかを確認します。したがってisset()、設定されていない変数と NULL の変数を区別するために使用することはできません。

変数を NULL に設定するということは、まさに次のことを意味します。変数は値に設定され、その値は特別な値 NULL です。

一方unset()、変数が設定されていないことを意味します。価値がなく、基本的にもう存在しません。

より深く掘り下げたい場合、これはガベージコレクションなどに影響を与えます。

于 2012-10-12T12:58:38.590 に答える
1

すべてはすでにほとんど回答されていますが、次の例を追加したかっただけです。

$a = 1;
$b = 2;

if ( $a == true ) echo 'Value'; else echo 'No value';
if ( $b == true ) echo 'Value'; else echo 'No value';

/*
Value
Value
*/

$a = NULL;
unset( $b );

if ( $a == true ) echo 'Value'; else echo 'No value';
if ( $b == true ) echo 'Value'; else echo 'No value';

/*
No value

Notice: Undefined variable: b in C:\test\test.php on line 13
No value
*/

結果は近いかもしれませんが、そのような変数はもう存在しないため、最後の結果は通知を生成します。

于 2012-10-12T13:04:44.520 に答える
0

変数を NULL に設定すると、変数が値に設定され、値が特別な値 NULL であるのとまったく同じように、値 NULL が変数に割り当てられます。

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

unset() は、変数が設定されておらず、値がなく、基本的に変数が存在しないことを意味します。

于 2016-10-21T08:53:42.580 に答える
0

主な違いは、次のように変数を NULL に設定することです。

$a = NULL;

値を割り当てています。ここではNULL値です。

unset()みたいだけど

unset($a);

変数の設定を解除します。つまり、変数テーブルから変数を削除します。

未定義の変数はすべてNULLPHP にあるため、違いがわからない場合があります。

ただし、設定を解除した変数がエイリアスの場合、エイリアスのみが削除され、値は割り当てられませんNULL

そのデモンストレーション:

<?php                         // 01
                              // 02
$a = 1;                       // 03
$b = &$a;                     // 04
                              // 05
$b = NULL;                    // 06
                              // 07
var_dump($a);                 // 08
                              // 09
unset($b);                    // 10
                              // 11
var_dump($a);                 // 12
                              // 13    
unset($a);                    // 14
                              // 15
var_dump($a);                 // 16

出力:

NULL
NULL

Notice: Undefined variable: a in /t.php on line 16
NULL

http://codepad.org/cC1vRx0W

于 2012-10-12T14:54:58.650 に答える