上面的代码中,只要子类定义了构造函数和析构函数,就不会执行父类的构造函数与析构函数,子类可以定义构造函数和析构函数的参数可以和父类不一样;
class person extends animal { } //$person_obj=new person();此代码错误,因为父类的构造函数有2个参数,所以在类实例化为对象时需要对应带两个参数; $person_obj=new person('170','36');上面的代码中,由于没有定义构造函数和析构函数,所以会自动调用父类的构造函数和析构函数;
class person extends animal { function __construct($x) { parent::__construct('36','29'); echo "<br />$x<br />"; } function __destruct() { parent::__destruct(); echo 'person类运行完毕'; } } $person_obj=new person('3'); $person_obj->introduce();上面的代码中,如果调用父类的构造函数和析构函数,需要parent::__construct('130','41');,parent::destruct();如果调用父类的构造函数,参数必须和父类的对应一致
一共总结如下几点:
一:子类如果不定义构造函数和析构函数时,会自动调用父类的构造函数和析构函数;在类初始化实例对象时,参数要与父类的构造函数一致;
二:子类可以定义构造函数和析构函数,子类的构造函数的参数可以和父类不一样;只要子类定义了构造函数和析构函数,那么父类的构造函数和析构函数就没有执行的机会,就不会调用;
三:如果子类想调用父类的构造函数和析构函数,可以在构造函数和析构函数里面parent::__construct('130','41');,parent::destruct();参数必须和父类的对应一致,此时父类的构造函数和析构函数的地位就像普通的public函数一样,不会自动执行;子类的任何一个成员函数都可以调用,包含子类的析构函数和构造函数,例如下面的代码;
class person extends animal { function __construct($x) { parent::__construct('36','29'); echo "<br />$x<br />"; } function __destruct() { parent::__destruct(); echo '<br />person类运行完毕'; } function test() { parent::__construct('36','29'); } } $person_obj=new person('3'); $person_obj->introduce(); $person_obj->test();转载于:https://www.cnblogs.com/anxuexi/archive/2013/03/08/2950068.html
相关资源:数据结构—成绩单生成器