我有一個對象數組。如果我調用unset($ array),它會取消設置數組中的所有對象和數組還是數組?我們假設這些對象在其他地方被引用。是否取消設置一個對象數組,只取消數組或所有對象?
回答
如果該數組包含對該對象的唯一引用,那麼是的。否則不。另外,請注意PHP文檔中的一些事項:
unset()做的就是它的名稱 - 取消設置變量。它不強制立即釋放內存。 PHP的 垃圾收集器會做它時,它 看到千篇一律 - 儘快意向,作爲 反正不需要的CPU週期, 或遲腳本之前將 耗盡內存,無論發生什麼, 第一。
它看起來像內存不會釋放,直到您的腳本完成執行。 http://bugs.php.net/bug.php?id=48368
由於您沒有指定您使用的版本,所以我應該注意,由於垃圾收集器的引入,如果您處於版本5.3或更高版本,其他答案會更合適。但是,如果沒有GC,您的對象將保留在內存中,直到腳本執行完畢。 – 2010-01-22 19:02:10
我正在使用5.2.6。 – 2010-01-22 19:40:43
GSto是正確的...只有PHP garbadge收集器可以釋放內存。 unset()一個變量或將其設置爲NULL可以加速「garbadge收集」過程(以CPU週期爲代價),但無法直接釋放某些內存(在「刪除」實際上釋放內存的情況下, 。
我問過類似的問題,前一段時間在一個論壇上,這是我得到了什麼:
從缶廬@ codingforums.com:
取消設置自由是它的資源,並且沒有任何 請求也是如此(例如 mysql_free_result)。是的,這允許 收集器照顧它。但是 直到收集過程發生, 它將忽略任何引用的 變量。所以,如果gc 的通過發現引用了一個變量,那麼它 將忽略它。如果它看到它已經被釋放了,它會佔用它,但是如果你有一塊不是 的數據塊,它將被釋放並且不會被使用,它會在內存中坐在 內,直到腳本終止爲止(少於 相關時下現代高ram systems)。對於gc來說,使用未設置的數組是 。我會 看看我是否能在源找到它, 但我會假定所有包含HashMap 使用的C基準指針和 沒有價值,所以值本身 任何意義的,因爲沒有一個空指針 是無論如何,尺寸相同。我倒是 還懷疑,一旦GC到達 HashMap中,它會經過 並釋放與 它相關的所有的zval並履行寫上副本 與 一個特定變量(花式相關的任何個人指針 表示不會發布任何索引 ,這是由另一個 變量引用的)。
- 1. 在類對象數組中取消設置類對象調用所有類對象的類型?
- 2. Fabric.js組/取消組合 - 單個對象消失,同時取消組合
- 3. JSON只讀取對象,沒有數組
- 4. 取消對對象的所有引用
- 5. 取消設置從一個數組PHP
- 6. 如何比較和取消設置數組中的對象與數組中的其他對象?
- 7. json對象中只有一個數組
- 8. 取消設置對象屬性
- 9. 在對象中取消設置屬性
- 10. 取消設置mysql_fetch_field對象值MYSQL PHP
- 11. TypeError:'builtin_function_or_method'對象是否取消訂閱?
- 12. 從對象數組中獲取對象
- 13. 獲取對象的對象數組
- 14. 提取對象數組的對象
- 15. 獲取從一個Zend_Db_Table_Row對象數組
- 16. Golang讀取一個Json對象數組
- 17. 初始化後取消設置所有自定義Javascript對象
- 18. 取消設置對象的所有實例PHP
- 19. 取消codeigniter對象或一般的PHP?
- 20. 取消設置另一個數組內的數組索引
- 21. 設置對象數組鍵
- 22. 編組和取消編組與定義的對象一般對象
- 23. 獲取對象或數組的深度
- 24. jquery數組獲取對象
- 25. 獲取數組對象
- 26. 獲取數組對象
- 27. 讀取對象數組
- 28. 檢查數組中的對象是否是另一個數組
- 29. 合併兩個對象數組並獲取唯一對象PHP
- 30. 從對象數組中獲取對象數組的字段值
讓我們假設你嘗試過。發生了什麼? – GZipp 2010-01-22 18:02:43
那麼,當我調用unset()之後print_r($ array)時,什麼也不打印。所以我不確定只是數組或者數組和它包含的對象是否被釋放。 – 2010-01-22 18:35:14