Itu disebutkan di halaman manual yang tidak disetel pada 2009 :
unset()tidak hanya apa yang namanya - hapus variabel. Itu tidak memaksa pembebasan memori segera. Pemulung sampah PHP akan melakukannya ketika cocok - dengan niat segera, karena siklus CPU itu tidak diperlukan, atau selambat-lambatnya sebelum skrip kehabisan memori, apa pun yang terjadi terlebih dahulu.
Jika Anda melakukannya $whatever = null;maka Anda menulis ulang data variabel. Anda mungkin mendapatkan memori lebih cepat / menyusut lebih cepat, tetapi mungkin mencuri siklus CPU dari kode yang benar-benar membutuhkannya lebih cepat, menghasilkan waktu eksekusi keseluruhan yang lebih lama.
(Sejak 2013, unsethalaman manual itu tidak termasuk bagian itu lagi)
Perhatikan bahwa hingga php5.3, jika Anda memiliki dua objek dalam referensi melingkar , seperti dalam hubungan orangtua-anak, panggilan tidak disetel () pada objek induk tidak akan membebaskan memori yang digunakan untuk referensi induk dalam objek anak. (Memori juga tidak akan dibebaskan ketika objek induk dikumpulkan dari sampah.) ( Bug 33595 )
Pertanyaan " perbedaan antara tidak disetel dan = nol " merinci beberapa perbedaan:
unset($a)juga menghapus $adari tabel simbol; sebagai contoh:
$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);
Keluaran:
Notice: Undefined variable: a in xxx
NULL
Tapi kapan $a = nulldigunakan:
$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:
NULL
Tampaknya itu $a = nullsedikit lebih cepat daripada unset()rekannya: memperbarui entri tabel simbol tampaknya lebih cepat daripada menghapusnya.
- ketika Anda mencoba menggunakan
unsetvariabel yang tidak ada ( ), kesalahan akan dipicu dan nilai untuk ekspresi variabel akan nol. (Karena, apa lagi yang harus dilakukan PHP? Setiap ekspresi perlu menghasilkan nilai tertentu.)
- Variabel dengan null ditugaskan untuk itu masih merupakan variabel normal.
$whatevermenunjuk ke suatu objek,$whatever = nulltimpa pointer, bukan objek itu sendiri, sehingga pada dasarnya sama denganunset().