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();
執行完以上代碼時輸出:php
此時你會發現,輸出的是空,而沒有輸出test。修改代碼,查看下整個流程。函數
class Test { protected $client; protected static $name; public function __construct() { self::$name = 'test'; echo "執行構造函數!\n"; } public function __destruct() { self::$name = null; echo "執行析構函數!\n"; } public function get() { return self::$name; } } $a = new Test(); echo "第一次new完畢!\n"; $a = (new Test()); echo "第二次new完畢!\n"; echo $a->get();
執行輸出:ui
執行構造函數! 第一次new完畢! 執行構造函數! 執行析構函數! 第二次new完畢! 執行析構函數!
終於逮到你了。。。當新建立類賦值於同一個變量時,究竟是先建立,仍是先銷燬呢?是先建立新對象,而後再銷燬舊對象。這就致使了先執行構造函數,而後再執行析構函數。在這一過程當中切記不要操做對象內的靜態屬性,不然會致使靜態屬性丟失。code
第一發布地對象