這篇文章主要介紹了PHP中子類別重載父類別的方法(parent::方法名稱)的相關內容,所有分享給大家,供大家參考
在PHP中不能定義重名的函數,也包含不能再在同一個類別中定義重名的方法,所以也就沒有方法重載。單在子類別中可以定義和父類別重名的方法,因為父類別的方法已經在子類別中存在,這樣在子類別中就可以把從父類別中繼承過來的方法重寫。
子類別中重載父類別的方法就是在子類別中覆寫從父類別繼承過來的方法,父類別中的方法被子類別繼承過來不就可以直接使用嗎?為什麼還要重載呢?因為有一些情況我們必須要涵蓋的。例如,有一個“鳥”類,在這個類中定義了鳥的通用方法“飛翔”。將「鴕鳥」類作為它的子類,就會將「飛翔」的方法繼承過來,但只要一呼叫「鴕鳥」類中的這個「飛翔」的方法,鴕鳥就會飛走。雖然鴕鳥是不會飛的,但其他特性都具有“鳥類”的特性,所以在聲明“鴕鳥”類時還是可以繼承“鳥”類的,但必須在“鴕鳥”類中將“鳥”類中繼承過來的「飛翔」方法改寫,就需要在子類別中重載父類別中的方法。
在下面的例子中,宣告的Person類別中有一個「說話」方法,Student類別繼承Person類別後可以直接使用「說話」方法。但Person類別中的「說話」方法只能說出它自己的成員屬性,而Student類別對Person類別進行了擴展,多增加了幾個新的成員屬性。程式碼如下圖所示:
<?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(); //调用学生类中覆盖父类的说话方法 ?>
改程式執行後輸出的結果為:
# #我的名字叫:張三,性別:男,我的年齡是:20,在edu學校上學
<?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中子類別重載父類別的方法php註解方法php定時方法php系統授權方
以上是PHP中子類別重載父類別的方法(parent::方法名稱)的詳細內容。更多資訊請關注PHP中文網其他相關文章!