面向对象,子类的构造函数与析构函数

class animal
{
   public $head;
   private $height;
   protected $width;
   public function __construct($height,$width)//属性和成员函数默认是public形式,所以public可以不用写
   {
       $this->height=$height;
	   $this->width=$width;
	   echo '<br>我是animal类构造函数的输出<br>';
   }
   public function move()
   {
       echo '<br>我是move方法的执行结果!<br>';  
   }
   function introduce()
   {
       echo '<br>我的高度是:'.$this->height;
	   echo '<br>我的宽度是:'.$this->width;
   }
   function __destruct()
   {
      echo 'animal类现在对象以及运行完,开始销毁了!';
   }
}
class person extends animal
{
    function __construct()
	{
	    echo '这是person类的构造方法<br />';	
	}
	 function __destruct()
	{
	    echo '这是person类析构方法<br />';	
	}   
}
$person_obj=new person();

  上面的代码中,只要子类定义了构造函数和析构函数,就不会执行父类的构造函数与析构函数,子类可以定义构造函数和析构函数的参数可以和父类不一样;

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();
posted @ 2013-03-08 15:37  qingq  阅读(328)  评论(0编辑  收藏  举报