Php 赋值NULL和unset有什么区别?

Php 赋值NULL和unset有什么区别?,php,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"); } el

查看以下代码:

 <?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";
   }

?>

当应用unset时,我得到相同的结果:

那么,赋值NULL和unset有什么区别呢?

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

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

未设置

unset()销毁指定的变量

它是否已启动并不重要,因为您正在使用isset,它将为已启动变量和空值返回false,因为有人从

unset()只执行其名称所说的操作-取消设置变量。事实并非如此 强制立即释放内存。PHP的垃圾收集器将在 只要不需要这些CPU周期,它就可以很快看出它的用意 不管怎么说,或是在脚本内存耗尽之前, 不管先发生什么

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

您正在使用
isset()
。根据,
isset()
检查变量是否已设置且不为空。因此,不能使用
isset()
来区分未设置的变量和空变量


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

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


如果您想更深入地了解,这对垃圾收集和其他方面都有影响。

所有问题都已经得到了解答,但我只想添加以下示例:

$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
*/

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

如下所示,对于标准比较操作,这两个结果的行为几乎相同

使用
unset()

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

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

$a = NULL;
正在赋值,此处为
NULL

尽管
unset()
like

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值完全分配给变量,就像变量设置为值一样,并且值是特殊值NULL

而unset()将销毁指定的变量。 函数中unset()的行为可能会因尝试销毁的变量类型而异

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

unset()
文档中进行一些比较。可能重复
NULL
NULL

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