看看以下代码:
<?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和取消设置有什么区别?
答案 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)
确定变量是否已设置且不为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
答案 6 :(得分:0)
将变量设置为NULL意味着将值NULL分配给变量,就像将变量设置为值并且值是特殊值NULL一样。
而unset()会破坏指定的变量。 函数内部的unset()行为可能会因您尝试销毁的变量类型而异。
unset()表示变量不再设置,它没有值,基本上该变量不再存在。