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
第一发布地对象