unset和=null有什么不同

Jack

unset和=null两者最重要的不同是unset($a)会从实例表中删除$a;例如:

$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);

输出:

Notice: Undefined variable: a in xxx
NULL

但当$a = null时:

$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);

输出:
NULL
通过对unset($a)和$a=null在同一基准下运行发现$a=null比unset($a)快大约6%。看来从实例表更新比从其中删除更快。

补充:

其他不同之处(如这段代码所示)观察每个调用后内存恢复的数量。

echo memory_get_usage(), PHP_EOL;
$a = str_repeat('hello world ', 100);
echo memory_get_usage(), PHP_EOL;
// EITHER unset($a); OR $a = null;
echo memory_get_usage(), PHP_EOL;

当用unset() 64 bytes的内存被返还。而$a=null;会释放内存272 bytes。我没有足够的知识,理解为什么有这两种方法会有208个字节的区别,但它仍然是一个差异。

京ICP备14008139号-1