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么??
求问 谢谢!
子类ppp继承了父类Car的析构函数
$car
=
new
Car();//
父类->$car
$ppp
=
new
ppp();//
子类->$ppp
你创建了两个对象,所以需要销毁两个,父类执行一次析构函数,子类根据继承性也执行了一次析构函数。 所以22.
说白了就是parent::__construct();这句话 导致同时只是子类和父类,执行完的结果是1 3 1 ,执行完后 先销毁父类 执行一个2 ,在销毁ppp 再执行父类的销毁析构函数2
反正我是这么理解的 好像没毛病,
说白话一点就是析构函数是在类和子类中构造函数执行完毕后才被调用,在子函数中调用了父类而父类析构函数继承执行一次
我明白了,是因为子类函数继承了父类函数的方法。所以当脚本全部执行完之后,进行析构函数时,父类执行完自己的析构函数后,子类要同样要执行一遍。所以会出现两个2,对么?
PHP进阶篇
181836 学习 · 2577 问题
相似问题