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