分配NULL和取消设置有什么区别?

时间:2012-10-12 12:53:34

标签: php

看看以下代码:

 <?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和取消设置有什么区别?

7 个答案:

答案 0 :(得分:6)

如下所示,对于标准比较操作,两者的行为几乎相同。

使用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    |
-------------------------------------------------------------------------------

答案 1 :(得分:3)

有人来自unset()

  

unset()正如它的名字所说 - 取消设置一个变量。它不是   迫使立即释放内存。 PHP的垃圾收集器会在什么时候执行   由于不需要那些CPU周期,所以很快就会看到拟合   无论如何,或者在脚本耗尽内存之前,   无论先发生什么。

     

如果你正在做$ whatever = null;那你就是   重写变量的数据。你可能会更快地释放/缩小内存,   但它可能会从真正需要它们的代码中窃取CPU周期   更快,导致总体执行时间更长。

答案 2 :(得分:2)

FORM PHP DOC isset

  

确定变量是否已设置且不为NULL。

     

如果使用unset()取消设置变量,则不再设置该变量。如果测试已设置为NULL的变量,则isset()将返回FALSE。另请注意,NULL字节(“\ 0”)不等同于PHP NULL常量。

未设置

  

unset()会破坏指定的变量。

无论是否启动它都没关系,因为你使用的是isset,它会为启动的变量和空值返回false

答案 3 :(得分:2)

您正在使用isset()。根据{{​​3}},isset()检查变量是否设置而不是NULL。因此,您无法使用isset()来区分未设置的变量和NULL变量。

将变量设置为NULL意味着:变量设置为一个值,该值是特殊值NULL。

另一方面,unset()表示不再设置变量。它没有价值,基本上不再存在。

如果你想深入了解,这对垃圾收集和其他事情有影响。

答案 4 :(得分: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
*/

结果可能很接近,但最后一个会产生通知,因为不再有这样的变量。

答案 5 :(得分:0)

主要区别在于将变量设置为NULL,如:

$a = NULL;

正在分配一个值,此处为NULL值。

虽然unset()喜欢

unset($a);

取消设置变量,这意味着将其从变量表中删除。

由于未定义的变量在PHP中都是NULL,因此您可能看不到差异。

但是,如果您取消设置的变量是别名,则仅删除别名,则不会为其分配值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

答案 6 :(得分:0)

将变量设置为NULL意味着将值NULL分配给变量,就像将变量设置为值并且值是特殊值NULL一样。

而unset()会破坏指定的变量。 函数内部的unset()行为可能会因您尝试销毁的变量类型而异。

unset()表示变量不再设置,它没有值,基本上该变量不再存在。