Вы должны понимать, что сброс объекта не влияет на php. Прежде всего, позвольте мне объяснить вам важную деталь с FOREACH:
если вы делаете:
$a = array(1,2,3,4,5);
foreach($a as $b){
unset($b);
}
$ a будет сначала скопировано в память. Это не грубая копия, скажем так, она только копирует ссылку на данные и увеличивает количество использования массива (1,2,3,4,5) в памяти. Внутри $ b у вас будут копии данных, найденных в $ a. Следовательно, сброс его из памяти только говорит: эй, удалите $ b из копии $ a. Следовательно, не внося никаких изменений в реальные $ a.
Если бы вы сделали:
$a = array(1,2,3,4,5);
foreach($a as $key => $b){
unset($a[$key]);
}
Тогда здесь у вас будет копия $ a в памяти. Foreach будет выполнять итерацию (цикл) для этой копии и предоставлять вам ключи для каждого элемента $ a, который копируется в $ b. Когда вы отменяете ($ a [$ key]), вы указываете php воздействовать на массив в $ a, который был скопирован при запуске foreach, но теперь, вместо того, чтобы воздействовать на копию, вы используете $ key для ссылки на элемент в $ a, который действительно существует в памяти и к которому у вас будет доступ.
Теперь для второй части, если мы посмотрим на объекты ... сброс объекта не имеет никакого эффекта, потому что переменные, содержащие объекты, являются только ссылками на данные в памяти со счетчиком. Если вы $ a = new Object () и затем $ b = $ a, вы создаете новую ссылку на этот объект, сохраняя его в целости и сохранности (не копируется).
Если бы вы сбросили ($ a), вы бы сбросили только ссылку на объект, а $ b все равно будет указывать на этот объект в памяти. Если вы сбрасываете ($ b), тогда вы сбрасываете ссылку на объект из памяти, потому что ничто не указывает на него.
Надеюсь, это прояснит ...
Удачи