Sie müssen verstehen, dass das Entfernen eines Objekts in PHP keine Auswirkungen hat. Lassen Sie mich zunächst ein wichtiges Detail mit FOREACH erklären:
Wenn Sie Folgendes tun:
$a = array(1,2,3,4,5);
foreach($a as $b){
unset($b);
}
Wird $a zuerst im Speicher kopiert. Es handelt sich nicht um eine brutale Kopie per se, es kopiert nur eine Referenz auf die Daten und erhöht die Anzahl der Verwendungen des Arrays (1,2,3,4,5) im Speicher. Innerhalb von $b haben Sie Kopien der Daten, die in $a gefunden wurden. Daher bedeutet das Löschen aus dem Speicher nur, dass Sie sagen: Entferne $b aus der Kopie von $a. Daher wird keinerlei Änderung am echten $a vorgenommen.
Wenn Sie Folgendes tun würden:
$a = array(1,2,3,4,5);
foreach($a as $key => $b){
unset($a[$key]);
}
Dann hätten Sie hier eine Kopie von $a im Speicher. Das Foreach würde auf dieser Kopie iterieren und Ihnen Schlüssel für jedes Element von $a bereitstellen, das in $b kopiert wird. Wenn Sie unset($a[$key]) aufrufen, teilen Sie PHP mit, das Array in $a zu beeinflussen, das kopiert wurde, als die foreach-Schleife begann. Aber jetzt, anstatt die Kopie zu beeinflussen, verwenden Sie den $key, um auf ein Element in $a zu verweisen, das tatsächlich im Speicher existiert und auf das Sie zugreifen können.
Jetzt zum zweiten Teil, wenn wir uns Objekte ansehen... Das Entfernen eines Objekts hat keine Auswirkung, weil Variablen, die Objekte enthalten, nur Verweise auf Daten im Speicher mit einer Zählung sind. Wenn Sie also $a = new Object() setzen und dann $b = $a, erstellen Sie einen neuen Verweis auf dieses Objekt, ohne es zu kopieren.
Wenn Sie unset($a) aufrufen, entfernen Sie nur den Verweis auf das Objekt und $b würde immer noch auf dieses Objekt im Speicher verweisen. Wenn Sie unset($b) aufrufen, entfernen Sie dann den Objektverweis aus dem Speicher, weil nichts darauf zeigt.
Hoffentlich wird das für Sie verständlicher...
Viel Glück