您需要了解取消设置对象在 php.ini 中没有任何影响。首先让我解释一下 FOREACH 的一个关键细节:
如果你这样做:
$a = array(1,2,3,4,5);
foreach($a as $b){
unset($b);
}
$a 将首先复制到内存中。它不是一个暴力复制,它只复制对数据的引用并增加内存中数组(1,2,3,4,5)的使用计数。在 $b 中,您将拥有在 $a 中找到的数据的副本。因此,从内存中取消设置它只是说,嘿,从 $a 的副本中取消设置 $b。因此,对真正的 $a 没有任何改变。
如果你这样做:
$a = array(1,2,3,4,5);
foreach($a as $key => $b){
unset($a[$key]);
}
那么这里你会在内存中有一个 $a 的副本。 Foreach 将在该副本上进行迭代(循环),并为您提供复制到 $b 中的每个元素 $a 的键。当你 unset($a[$key]) 你告诉 php 影响在 foreach 开始时复制的 $a 中的数组,但是现在,不是影响副本,而是使用 $key 来引用 $ 中的元素一个真正存在于内存中并且你可以访问的。
现在对于第二部分,如果我们查看对象...取消设置对象没有任何效果,因为包含对象的变量只是对内存中具有计数的数据的引用。如果 $a = new Object() 然后 $b = $a,则创建对该对象的新引用,同时保持其完整(未复制)。
如果你要取消设置($a),你只会取消对对象的引用,而 $b 仍然会指向内存中的那个对象。如果你取消设置($b),你就会从内存中取消设置对象引用,因为没有任何东西指向它。
希望它更清楚......
祝你好运