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

来源:2-5 PHP类和对象之构造函数和析构函数

zdctlg

2018-06-09 20:58

<?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回答

  • 慕斯卡6567529
    2018-06-11 17:42:51
    已采纳

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

    zdctlg

    非常感谢!

    2018-06-11 21:59:03

    共 1 条回复 >

  • 慕圣3571134
    2018-12-20 16:47:36

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

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

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

  • 慕沐4974640
    2018-08-07 19:06:53

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

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

  • 慕仔9497051
    2018-07-27 10:28:02

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

  • zdctlg
    2018-06-09 21:40:49

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

PHP进阶篇

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

181836 学习 · 2577 问题

查看课程

相似问题