摘要:执行构造函数执行析构函数第一次完毕第二次完毕执行输出执行构造函数第一次完毕执行构造函数执行析构函数第二次完毕执行析构函数终于逮到你了。。。这就导致了先执行构造函数,然后再执行析构函数。
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完毕! 执行析构函数!
终于逮到你了。。。当新创建类赋值于同一个变量时,到底是先创建,还是先销毁呢?是先创建新对象,然后再销毁旧对象。这就导致了先执行构造函数,然后再执行析构函数。在这一过程中切记不要操作对象内的静态属性,否则会导致静态属性丢失。
第一发布地
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22592.html
摘要:在编写一段析构方法的研究代码中,我遇到了交叉知识点导致的错误在不同作用域,析构方法与引用次数导致了不一样的结果。前提本文假装你已经明白什么是析构方法作用域及引用次数。当析构函数的调用钩子去检测引用数时,全局的实例自然无法触发这个事件。 在编写一段析构方法的研究代码中,我遇到了交叉知识点导致的错误——在不同作用域,析构方法与引用次数导致了不一样的结果。 前提 本文假装你已经明白什么是析构...
摘要:前言这段时间一直负责公司的小程序的开发,总结了一些小程序的开发心得,方便自己以后的查阅也方便同仁少踩点坑。文章底部的技巧类小程序的识别小程序二维码功能,小程序的高斯模糊,都是自己填的坑。 前言:这段时间一直负责公司的小程序的开发,总结了一些小程序的开发心得,方便自己以后的查阅也方便同仁少踩点坑。文章底部的技巧类小程序的识别小程序二维码功能,小程序的高斯模糊,都是自己填的坑。欢迎交流。 ...
摘要:比起和统一的迭代器和引用更好。因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃即如果继续使用已经失效的迭代器,程序可能会崩溃。 ...
阅读 660·2021-11-22 09:34
阅读 3794·2021-09-22 15:42
阅读 1285·2021-09-03 10:28
阅读 1053·2021-08-26 14:13
阅读 1859·2019-08-29 15:41
阅读 1391·2019-08-29 14:12
阅读 3337·2019-08-26 18:36
阅读 3283·2019-08-26 13:47