Nó đã được đề cập trong trang hướng dẫn sử dụng unset trong năm 2009 :
unset()
không đúng như tên gọi của nó - bỏ đặt một biến. Nó không buộc giải phóng bộ nhớ ngay lập tức. Trình thu gom rác của PHP sẽ làm điều đó khi nó thấy phù hợp - theo ý định ngay sau đó, vì những chu kỳ CPU đó không cần thiết, hoặc muộn nhất là trước khi tập lệnh sẽ hết bộ nhớ, bất cứ điều gì xảy ra trước tiên.
Nếu bạn đang làm $whatever = null;
thì bạn đang viết lại dữ liệu của biến. Bạn có thể giải phóng bộ nhớ / thu nhỏ nhanh hơn, nhưng nó có thể đánh cắp các chu kỳ CPU từ mã thực sự cần chúng sớm hơn, dẫn đến thời gian thực hiện tổng thể lâu hơn.
(Kể từ năm 2013, unset
trang người đàn ông đó không bao gồm phần đó nữa)
Lưu ý rằng cho đến khi php5.3, nếu bạn có hai đối tượng trong tham chiếu vòng tròn , chẳng hạn như trong mối quan hệ cha-con, việc gọi unset () trên đối tượng cha sẽ không giải phóng bộ nhớ được sử dụng cho tham chiếu cha trong đối tượng con. (Bộ nhớ cũng sẽ không được giải phóng khi đối tượng cha mẹ được thu gom rác.) ( Lỗi 33595 )
Câu hỏi " sự khác biệt giữa unset và = null " nêu chi tiết một số khác biệt:
unset($a)
cũng loại bỏ $a
khỏi bảng biểu tượng; ví dụ:
$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);
Đầu ra:
Notice: Undefined variable: a in xxx
NULL
Nhưng khi $a = null
được sử dụng:
$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:
NULL
Có vẻ như $a = null
nhanh hơn một chút so với unset()
đối tác của nó : cập nhật mục nhập bảng biểu tượng dường như nhanh hơn loại bỏ nó.
- khi bạn cố gắng sử dụng biến không tồn tại (
unset
), một lỗi sẽ được kích hoạt và giá trị cho biểu thức biến sẽ là null. (Bởi vì, PHP nên làm gì khác? Mỗi biểu thức cần dẫn đến một số giá trị.)
- Một biến có null được gán cho nó vẫn là một biến hoàn toàn bình thường.
$whatever
trỏ vào một đối tượng,$whatever = null
ghi đè con trỏ, không phải chính đối tượng đó, vì vậy nó hoạt động về cơ bản giống nhưunset()
.