首页/PHP/PHP中构造方法及其继承关系的详细解释

PHP中构造方法及其继承关系的详细解释

php5+,__construct()-构造方法,实例化对象时自动调用 可以用于初始化程序,给成员属性赋值或者调用成员方法

实例一、子类没有属于自己的构造方法,当对象实例化时自动调用父类构造方法。


<?php
	class person{	//person父类
		protected $name;
		public function __construct($name=""){
			$this->name = $name;	//初始化$name属性,默认空
		}
		public function sing(){
			return $this->name." is singing";
		}
		public function dance(){
			return $this->name." is danceing";
		}
	}
?>

<?php
	class student extends person{  //student子类继承了person父类,student没有自己的构造方法
		public function discuss(){
			return $this->name." is discuss in class";
		}
		//当子类,没有构造方法时,则父类的构造方法默认会被继承下来,且会自动执行。
	}
	$s1 = new student("leo");
	echo $s1->discuss();
?>

实例二、当子类有属于自己的构造方法时,将对父类的构造方法进行覆盖,同时为保证对象的完整性,一般需要调用一次父类的构造方法。


<?php
	class teacher extends person{
		protected $school;
		public function __construct($name="",$school=""){
                        //teacher子类继承person类,拥有自己的构造方法
			//如基类有构造方法,则覆盖父类的构造方法
			parent::__construct($name);	//借助父类的构造方法,进行初始化
			$this->school = $school;	//初始化基类的属性
		}
		public function teaching(){
			return $this->name." is teaching at ".$this->school;
		}
	}
	$t1 = new teacher("leo","sizhong");
	echo $t1->dance();
?>

总结:

基类在继承父类后,会拥有父类的属性和方法,这是继承的特性。基类的构造方法会首先调用父类的构造方法来实例化父类的属性,然后调用子类的构造方法,一般你不写,并不表示没有调用,而是首先调用了父类的无参构造方法,如果父类的某些属性需要在父类构造方法中特殊实例化,则你必须显示的调用父类的有参构造方法,这样保证子类属性的完整性,所以一般在基类中调用一次父类的构造方法总是没错的。
收藏:

相关资讯