上面的答案很棒,尤其是“两种方法之间的一个重要区别是 unset($a) 也会从符号表中删除 $a ”的评论。
但是,我认为没有人真正从实际意义上完全回答了这个问题,因为他们没有描述如何使用这两者。好的,我想我们知道他们基本上都做同样的事情。为什么要使用一个而不是另一个?
无效的
尽管 PHP 自我管理内存/垃圾收集,但会立即回收内存(代价是花费更长的时间)。
未设置()
通常建议使用它,因为它“当我可以使用它时”回收内存,因此被认为更快,因为它不会立即将资源专用于它。
什么时候应该使用 null vs unset?
基本(小数据)数据数组等是unset的良好候选者,因为内存不会成为问题。更大的数据集和/或需要立即回收内存的任何地方都更适合null。例如,如果在一个函数等中多次调用此类大型数据库请求,可能会非常迅速地蚕食您的 PHP 内存上限,这将导致内存已满等原因导致页面 500 错误。因此,当速度很重要时(或一般情况下),应该首选unset ) 并且几乎不需要担心内存的增加。
示例:取一个大数组并将其放入 MemCache:
list($inv1, $inv2, $inv3, $inv4) = array_chunk($inventory_array),
ceil(count($val['inventory']) / 4));
MemCache::set($cacheKeyInv1, $inv1, $expiry);
MemCache::set($cacheKeyInv2, $inv2, $expiry);
MemCache::set($cacheKeyInv3, $inv3, $expiry);
MemCache::set($cacheKeyInv4, $inv4, $expiry);
for ($i = 1; $i < 5; $i++) {
${"inv" . $i} = null; // why not use unset ?
}
for 循环正在清理数据,可以使用 null 或 unset,但由于它是一个大型数据集,也许 null 是首选,因为它会更快地回收内存。