摘要:執行構造函數執行析構函數第一次完畢第二次完畢執行輸出執行構造函數第一次完畢執行構造函數執行析構函數第二次完畢執行析構函數終于逮到你了。。。這就導致了先執行構造函數,然后再執行析構函數。
class Test { protected $client; protected static $name; public function __construct() { self::$name = "test"; } public function __destruct() { self::$name = null; } public function get() { return self::$name; } } $a = new Test(); $a = (new Test()); echo $a->get();
執行完以上代碼時輸出:
此時你會發現,輸出的是空,而沒有輸出test。修改代碼,查看下整個流程。
class Test { protected $client; protected static $name; public function __construct() { self::$name = "test"; echo "執行構造函數! "; } public function __destruct() { self::$name = null; echo "執行析構函數! "; } public function get() { return self::$name; } } $a = new Test(); echo "第一次new完畢! "; $a = (new Test()); echo "第二次new完畢! "; echo $a->get();
執行輸出:
執行構造函數! 第一次new完畢! 執行構造函數! 執行析構函數! 第二次new完畢! 執行析構函數!
終于逮到你了。。。當新創建類賦值于同一個變量時,到底是先創建,還是先銷毀呢?是先創建新對象,然后再銷毀舊對象。這就導致了先執行構造函數,然后再執行析構函數。在這一過程中切記不要操作對象內的靜態屬性,否則會導致靜態屬性丟失。
第一發布地
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22592.html
摘要:在編寫一段析構方法的研究代碼中,我遇到了交叉知識點導致的錯誤在不同作用域,析構方法與引用次數導致了不一樣的結果。前提本文假裝你已經明白什么是析構方法作用域及引用次數。當析構函數的調用鉤子去檢測引用數時,全局的實例自然無法觸發這個事件。 在編寫一段析構方法的研究代碼中,我遇到了交叉知識點導致的錯誤——在不同作用域,析構方法與引用次數導致了不一樣的結果。 前提 本文假裝你已經明白什么是析構...
摘要:前言這段時間一直負責公司的小程序的開發,總結了一些小程序的開發心得,方便自己以后的查閱也方便同仁少踩點坑。文章底部的技巧類小程序的識別小程序二維碼功能,小程序的高斯模糊,都是自己填的坑。 前言:這段時間一直負責公司的小程序的開發,總結了一些小程序的開發心得,方便自己以后的查閱也方便同仁少踩點坑。文章底部的技巧類小程序的識別小程序二維碼功能,小程序的高斯模糊,都是自己填的坑。歡迎交流。 ...
摘要:比起和統一的迭代器和引用更好。因此迭代器失效,實際就是迭代器底層對應指針所指向的空間被銷毀了,而使用一塊已經被釋放的空間,造成的后果是程序崩潰即如果繼續使用已經失效的迭代器,程序可能會崩潰。 ...
閱讀 683·2021-11-22 09:34
閱讀 3822·2021-09-22 15:42
閱讀 1327·2021-09-03 10:28
閱讀 1072·2021-08-26 14:13
閱讀 1901·2019-08-29 15:41
閱讀 1423·2019-08-29 14:12
閱讀 3364·2019-08-26 18:36
閱讀 3307·2019-08-26 13:47