为了账号安全,请及时绑定邮箱和手机立即绑定

求问为什么打印出来两个析构函数的结果?

<?php
class Car {
    function __construct(){
            print "1";
    }
    function __destruct(){
    print "2";
} 



}
class Ppp extends Car{
    function __construct() {
    print "3";
    parent::__construct();
}
}
$car = new Car();//1   2
$ppp = new ppp();
echo "使用后,准备销毁car对象";

运行的结果是:131使用后,准备销毁car对象22

请问为什么是22 ?脚本里面只有一个析构函数,结果不应该只打印一个2么??

求问 谢谢!

正在回答

5 回答

子类ppp继承了父类Car的析构函数

0 回复 有任何疑惑可以回复我~
#1

zdctlg 提问者

非常感谢!
2018-06-11 回复 有任何疑惑可以回复我~

$car new Car();//父类->$car

$ppp new ppp();//子类->$ppp

你创建了两个对象,所以需要销毁两个,父类执行一次析构函数,子类根据继承性也执行了一次析构函数。 所以22.

0 回复 有任何疑惑可以回复我~

说白了就是parent::__construct();这句话  导致同时只是子类和父类,执行完的结果是1 3 1 ,执行完后https://img1.sycdn.imooc.com//5b697ce4000126d003770070.jpg  先销毁父类 执行一个2 ,在销毁ppp 再执行父类的销毁析构函数2       

反正我是这么理解的 好像没毛病,

0 回复 有任何疑惑可以回复我~

说白话一点就是析构函数是在类和子类中构造函数执行完毕后才被调用,在子函数中调用了父类而父类析构函数继承执行一次

0 回复 有任何疑惑可以回复我~

我明白了,是因为子类函数继承了父类函数的方法。所以当脚本全部执行完之后,进行析构函数时,父类执行完自己的析构函数后,子类要同样要执行一遍。所以会出现两个2,对么?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181826    人
  • 解答问题       2577    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程

求问为什么打印出来两个析构函数的结果?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信