PHP 函數中執行個體化對象 並把這個對象返回,是否會產生垃圾系統將不自動收?

來源:互聯網
上載者:User
如題,如果我這麼建立代碼
假如有一個Apple這個類。

function abc(){    $a = new Apple();    return a;}$a = abc();$name = $a -> getname();......

經過上述這麼調用後,是不是$a就不會自動被PHP垃圾處理器回收?

回複內容:

如題,如果我這麼建立代碼
假如有一個Apple這個類。

function abc(){    $a = new Apple();    return a;}$a = abc();$name = $a -> getname();......

經過上述這麼調用後,是不是$a就不會自動被PHP垃圾處理器回收?

struct _zval_struct {

zvalue_value value; unsigned char type; unsigned char is_ref;short refcount;

};

value:變數的值
type:變數的類型
is_ref:變數是否被引用
refcount:引用次數

重點在is_ref,如果為false,說明當前沒有被按引用引用,且refcount為0時,則PHP記憶體回收機制會將其回收。

備忘:函數中的$a在函數執行完畢後,立刻被回收。函數外的$a,必須被手動銷毀,要麼就是指令碼執行完畢後,變數$a被銷毀!

函數中的$a的話,函數執行完就被釋放了。

函數外的$a如果你不unset的話,在指令碼執行完之前都會存在。

函數中建立的Apple對象的話,因為你把它作為傳回值,函數外的$a還儲存著對Apple對象的引用,所以不會被回收。除非你把函數外的$a給unset了或者修改了它的值,使得沒有對Apple對象的引用了,Apple對象才會被回收。

變數引用次數為零自然會被回收

確定後面不再使用全域變數$a,那執行unset($a)釋放掉就好了.

PHP的記憶體回收是基於引用計數實現的,具體看官方文檔:
http://php.net/manual/zh/features.gc.php

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.