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

Avi*_*bey 0 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";
   }

?>
Run Code Online (Sandbox Code Playgroud)

当应用未设置时,我得到相同的结果:

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

aef*_*fxx 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    |
-------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)


MLe*_*vre 5

正如有人从unset()中所说

unset() 正如它的名字所说的那样——取消设置变量。它不会强制立即释放内存。PHP 的垃圾收集器会在认为合适的时候执行此操作 - 有意为之,因为无论如何都不需要这些 CPU 周期,或者最晚在脚本耗尽内存之前执行,无论先发生什么。

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