php 父类含有构造,析构函数,当子类调用父类构造函数时,析构函数野一并调用,这是为什么?

发布于 2022-09-04 18:09:46 字数 450 浏览 14 评论 0

class Car {
    //增加构造函数与析构函数
    function __construct(){
        print "我是Car构造函数\n";
    }
    
    function __destruct(){
        print "我是Car析构函数\n";
        
    }
    
}

class Truck extends Car{
    
    function __construct(){
        
        print "我是Truck的构造函数\n";
        parent::__construct();
    }
    
    
    
}
$car = new Car();
$truck = new Truck();

结果:我是Car构造函数 我是Truck的构造函数 我是Car构造函数 我是Car析构函数 我是Car析构函数

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里°也失望 2022-09-11 18:09:46
class Car {
        public $i;
        
        //增加构造函数与析构函数
        function __construct($i){
            $this->i = $i;
            print "我是Car构造函数$this->i\n";
            echo "<br>";
        }
        
        function __destruct(){
            print "我是Car析构函数$this->i\n";
            echo "<br>";
        }

    }

    class Truck extends Car{

        function __construct(){
            print "我是Truck的构造函数\n";
            echo "<br>";
            parent::__construct(2);
        }
    }
    $car = new Car(1);
    $truck = new Truck();

我是Car构造函数1 
我是Truck的构造函数 
我是Car构造函数2 
我是Car析构函数2 
我是Car析构函数1 

先实例化car,执行car的构造函数
实例化trunk,执行trunk的构造函数,在trunk中调用的父类构造函数并执行父类构造函数
执行析构函数顺序入栈顺序相反,“先进后出”,trunk后实例化,先从栈中弹出,执行析构函数,由于trunk没有析构函数,则执行父类的析构函数car2,如果trunk中有析构函数,覆盖类父类的析构函数,执行trunk中的析构函数,然后执行第一次实例化的car对象的析构函数

酷炫老祖宗 2022-09-11 18:09:46

不是子类调用的,而是在脚本运行完毕后PHP销毁对象时自动调用的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文