资讯专栏INFORMATION COLUMN

构造函数与析构函数执行顺序,记一次小bug修复。

xiao7cn / 2940人阅读

摘要:执行构造函数执行析构函数第一次完毕第二次完毕执行输出执行构造函数第一次完毕执行构造函数执行析构函数第二次完毕执行析构函数终于逮到你了。。。这就导致了先执行构造函数,然后再执行析构函数。

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

相关文章

  • 记一次小程序之旅

    摘要:用户绑定的逻辑主要复杂在既需要考虑微信本身的接口在不同情况下提供的数据不同,另外一方面就是考虑本身用户模块的业务逻辑问题。针对每一节课以及每一节系列课程生成小程序太阳码主要涉及到几个细节问题。 感觉已经好久没写程序了,最近这段时间,一方面是学习了python,然后折腾了scrapy框架,用python写了下守护进程程序监听任务以及用redis做队列任务通信,并开进程来处理爬虫任务。以上...

    不知名网友 评论0 收藏0
  • 【In PHP】析构、作用域与引用

    摘要:在编写一段析构方法的研究代码中,我遇到了交叉知识点导致的错误在不同作用域,析构方法与引用次数导致了不一样的结果。前提本文假装你已经明白什么是析构方法作用域及引用次数。当析构函数的调用钩子去检测引用数时,全局的实例自然无法触发这个事件。 在编写一段析构方法的研究代码中,我遇到了交叉知识点导致的错误——在不同作用域,析构方法与引用次数导致了不一样的结果。 前提 本文假装你已经明白什么是析构...

    fai1017 评论0 收藏0
  • 记一次小程序项目的开发心得

    摘要:前言这段时间一直负责公司的小程序的开发,总结了一些小程序的开发心得,方便自己以后的查阅也方便同仁少踩点坑。文章底部的技巧类小程序的识别小程序二维码功能,小程序的高斯模糊,都是自己填的坑。 前言:这段时间一直负责公司的小程序的开发,总结了一些小程序的开发心得,方便自己以后的查阅也方便同仁少踩点坑。文章底部的技巧类小程序的识别小程序二维码功能,小程序的高斯模糊,都是自己填的坑。欢迎交流。 ...

    you_De 评论0 收藏0
  • 【C++】vector

    摘要:比起和统一的迭代器和引用更好。因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃即如果继续使用已经失效的迭代器,程序可能会崩溃。 ...

    LiveVideoStack 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<