《PHP学习:PHP中子类重载父类的方法【parent::方法名】》要点:
本文介绍了PHP学习:PHP中子类重载父类的方法【parent::方法名】,希望对您有用。如果有疑问,可以联系我们。
PHP教程在PHP中不能定义重名的函数,也包括不能再同一个类中定义重名的办法,所以也就没有办法重载.单在子类中可以定义和父类重名的办法,因为父类的办法已经在子类中存在,这样在子类中就可以把从父类中继承过来的办法重写.
PHP教程子类中重载父类的方法就是在子类中覆盖从父类中继承过来的方法,父类中的方法被子类继承过来不就可以直接使用吗?为什么还要重载呢?因为有一些情况我们必须要覆盖的.例如,有一个“鸟”类,在这个类中定义了鸟的通用方法“翱翔”.将“鸵鸟”类作为它的子类,就会将“翱翔”的方法继承过来,但只要一调用“鸵鸟”类中的这个“翱翔”的方法,鸵鸟就会飞走.虽然鸵鸟是不会飞的,但其他特性都具有“鸟类”的特性,所以在声明“鸵鸟”类时还是可以继承“鸟”类的,但必须在“鸵鸟”类中将“鸟”类中继承过来的“翱翔”方法改写,就需要在子类中重载父类中的方法.
PHP教程在下面的例子中,声明的Person类中有一个“说话”办法,Student类继承Person类后可以直接使用“说话”办法.但Person类中的“说话”办法只能说出它自己的成员属性,而Student类对Person类进行了扩展,多添加了几个新的成员属性.代码如下所示:
PHP教程
<?php
class Person{
protected $name;
protected $sex;
protected $Wage;
function __construct($name="",$sex="男",$age=1){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
}
//在人类中声明一个通用的说话办法,介绍一下自己
function say(){
echo "我的名字:".$this-> name.",性别:".$this ->sex.",年龄:".$this ->age.".<br>";
}
}
//声明一个学生类,使用extends关键字扩展(继承)person类
class Student extends Person {
private $school; //在学生类中声明一个所在学校school的成员属性
//覆盖父类中的构造办法,在参数列表中添加一个学校属性,用来创建对象并初始化成员属性
function __construct($name="",$sex="男",$age=1,$school=""){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
$this ->school = $school;
}
function study(){
echo $this ->name."正在".$this ->school."学习<br>";
}
//定义一个和父类中同名的办法,将父类中的说话办法覆盖并重写,多说出所在的学校名称
function say(){
echo "我的名字:".$this ->name.",性别:".$this ->sex.",年龄:".$this ->age.",在".$this ->school."学校上学<br>";
}
}
$student= new Student("张三","男",20,"edu"); //创建一个学生对象,并传给一个学校名称参数
$student -> say(); //调用学生类中覆盖父类的说话办法
?>
PHP教程改程序运行后输出的结果为:
PHP教程我的名字叫:张三,性别:男,我的年龄是:20,在edu学校上学
PHP教程在PHP中,提供了在子类重载的办法中调用父类被覆盖办法的功能.这样就可以在子类重写的办法中,继续使用从父类继承过来并被覆盖的办法,然后再按要求多添加一些新功能.调用的格式是使用“parent:办法名”在子类的重载办法中调用父类中被覆盖的办法.将上例中的代码修改一下,在子类重写的构造办法中使用“parent::__construct()”调用父类中被覆盖的构造办法,再多添加一条对子类中新扩展的成员属性初始化的代码.在子类中重写的say()办法中使用“parent::say()”调用父类中被覆盖的say()办法,再添加上输出子类成员属性的功能.
PHP教程代码如下所示:
PHP教程
<?php
class Person{
protected $name;
protected $sex;
protected $Wage;
function __construct($name="",$sex="男",$age=1){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
}
//在人类中声明一个通用的说话方法,介绍一下自己
function say(){
echo "我的名字:".$this-> name.",性别:".$this ->sex.",年龄:".$this ->age.".<br>";
}
}
//声明一个学生类,使用extends关键字扩展(继承)person类
class Student extends Person {
private $school; //在学生类中声明一个所在学校school的成员属性
//覆盖父类中的构造方法,在参数列表中添加一个学校属性,用来创建对象并初始化成员属性
function __construct($name="",$sex="男",$age=1,$school=""){
//调用父类中被覆盖的构造方法,为从父类中集成过来额出行赋初值
parent::__construct($name,$sex,$age);
$this ->school = $school;
}
function study(){
echo $this ->name."正在".$this ->school."学习<br>";
}
//定义一个和父类中同名的方法,将父类中的说话方法覆盖并重写,多说出所在的学校名称
function say(){
parent::say(); //调用父类中被本方法覆盖掉的方法
echo "在".$this ->school."学校上学<br>";
}
}
$student= new Student("张三","男",20,"edu"); //创建一个学生对象,并传给一个学校名称参数
$student -> say(); //调用学生类中覆盖父类的说话方法
?>
PHP教程上面的例子输出的结果和前一个例子是一样的,但在本例中通过在子类中直接调用父类中被覆盖的方法要简便很多.另外,在子类覆盖父类的方法时一定要注意,在子类中重写的方法拜访权限一定不能低于父类被覆盖的方法的拜访权限.例如,如果父类中的拜访权限是protected,那么在子类中重写的方法的权限就要是protected或public.
PHP教程以上内容是小编给大家介绍的PHP中子类重载父类的办法【parent::办法名】的相关内容,希望对大家有所帮助!如果大家想了解更多资讯,敬请关注维易PHP网站!
转载请注明本页网址:
http://www.vephp.com/jiaocheng/6773.html