2012-01-10 32 views

Trả lời

113

Bạn đang tìm kiếm unset().

Nhưng hãy xem xét rằng bạn không thể phá hủy rõ ràng đối tượng.

Nó sẽ ở đó, tuy nhiên nếu bạn không đặt đối tượng và tập lệnh của bạn đẩy PHP vào bộ nhớ, các đối tượng không cần thiết sẽ bị thu gom rác. Tôi sẽ đi với unset() (như trái ngược với thiết lập nó để null) vì nó có vẻ có hiệu suất tốt hơn (không được kiểm tra nhưng tài liệu trên one of the comments từ hướng dẫn chính thức PHP).

Điều đó nói rằng, hãy nhớ rằng PHP luôn phá hủy các đối tượng ngay sau khi trang được phân phối. Vì vậy, điều này chỉ nên được thực hiện trên các vòng thực sự dài và/hoặc các trang chuyên sâu.

+1

Vì vậy, Frankie, tôi đến từ C++, khi chúng ta sử dụng 'new' một lần, sau đó chúng ta ** phải ** sử dụng' delete' một lần. Điều này không đúng trong PHP? Có bộ sưu tập rác tự động khi đối tượng không còn cần thiết nữa? – gsamaras

+2

@gsamaras đó là sự thật. Bạn cũng có thể bị rò rỉ, tuy nhiên, và bạn nên đọc thêm về GC của php nếu bạn đang làm daemon hoặc tương tự. Trong phần lớn các trang web, yêu cầu quá ngắn ngủi đến mức không quan trọng. http://php.net/manual/en/features.gc.refcounting-basics.php – Frankie

+0

Có 'unset()' loại bỏ tham chiếu đến đối tượng không? –

-8

Tôi sẽ không được đặt bởi vì nó có thể cung cấp cho bộ thu gom rác một gợi ý tốt hơn để bộ nhớ có thể có sẵn trở lại sớm hơn. Hãy cẩn thận rằng bất kỳ thứ gì mà đối tượng trỏ đến hoặc có các tham chiếu khác hoặc bị bỏ đặt trước hoặc bạn thực sự sẽ phải đợi trên bộ thu gom rác vì sẽ không có xử lý cho chúng.

+4

Một gợi ý tốt hơn ...? – BoltClock

+11

Trừ khi bạn thực sự có nguồn để sao lưu câu trả lời của mình, có thể bạn không nên đăng những gì bạn nghĩ "có thể" xảy ra. Nó không hữu ích và dẫn đến loại thông tin sai lạc này được coi là sự thật và lặp đi lặp lại. – meagar

+1

@meagar đó là lý do chính xác tại sao tôi liên kết với trang hướng dẫn chính thức ở đâu, trong các nhận xét, có một thử nghiệm mẫu so sánh unset() với giá trị rỗng. – Frankie

7

Một bài có ích giải thích vài mis-hiểu biết về vấn đề này:

Don't Call The Destructor explicitly

này bao gồm nhiều quan niệm sai lầm về cách thức hoạt động destructor. Gọi nó rõ ràng sẽ không thực sự phá hủy biến của bạn, theo tài liệu PHP5:

PHP 5 giới thiệu khái niệm hủy tương tự như một ngôn ngữ hướng đối tượng khác, chẳng hạn như C + +. Phương thức hủy sẽ là được gọi ngay khi không có tham chiếu nào khác đến một đối tượng cụ thể hoặc theo bất kỳ thứ tự nào trong trình tự tắt.

Bài đăng ở trên cho biết rằng việc đặt biến thành null có thể hoạt động trong một số trường hợp, miễn là không có gì khác trỏ đến bộ nhớ được cấp phát.

Các vấn đề liên quan