PHP中子類重載父類的方法【parent::方法名】
在PHP中不能定義重名的函數(shù),也包括不能再同一個類中定義重名的方法,所以也就沒有方法重載。單在子類中可以定義和父類重名的方法,因為父類的方法已經(jīng)在子類中存在,這樣在子類中就可以把從父類中繼承過來的方法重寫。
子類中重載父類的方法就是在子類中覆蓋從父類中繼承過來的方法,父類中的方法被子類繼承過來不就可以直接使用嗎?為什么還要重載呢?因為有一些情況我們必須要覆蓋的。例如,有一個“鳥”類,在這個類中定義了鳥的通用方法“飛翔”。將“鴕鳥”類作為它的子類,就會將“飛翔”的方法繼承過來,但只要一調(diào)用“鴕鳥”類中的這個“飛翔”的方法,鴕鳥就會飛走。雖然鴕鳥是不會飛的,但其他特性都具有“鳥類”的特性,所以在聲明“鴕鳥”類時還是可以繼承“鳥”類的,但必須在“鴕鳥”類中將“鳥”類中繼承過來的“飛翔”方法改寫,就需要在子類中重載父類中的方法。
在下面的例子中,聲明的Person類中有一個“說話”方法,Student類繼承Person類后可以直接使用“說話”方法。但Person類中的“說話”方法只能說出它自己的成員屬性,而Student類對Person類進(jìn)行了擴(kuò)展,多添加了幾個新的成員屬性。代碼如下所示:
<?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>"; } } //聲明一個學(xué)生類,使用extends關(guān)鍵字?jǐn)U展(繼承)person類 class Student extends Person { private $school; //在學(xué)生類中聲明一個所在學(xué)校school的成員屬性 //覆蓋父類中的構(gòu)造方法,在參數(shù)列表中添加一個學(xué)校屬性,用來創(chuàng)建對象并初始化成員屬性 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."學(xué)習(xí)<br>"; } //定義一個和父類中同名的方法,將父類中的說話方法覆蓋并重寫,多說出所在的學(xué)校名稱 function say(){ echo "我的名字:".$this ->name.",性別:".$this ->sex.",年齡:".$this ->age.",在".$this ->school."學(xué)校上學(xué)<br>"; } } $student= new Student("張三","男",20,"edu"); //創(chuàng)建一個學(xué)生對象,并傳給一個學(xué)校名稱參數(shù) $student -> say(); //調(diào)用學(xué)生類中覆蓋父類的說話方法 ?>
改程序運行后輸出的結(jié)果為:
我的名字叫:張三,性別:男,我的年齡是:20,在edu學(xué)校上學(xué)
在PHP中,提供了在子類重載的方法中調(diào)用父類被覆蓋方法的功能。這樣就可以在子類重寫的方法中,繼續(xù)使用從父類繼承過來并被覆蓋的方法,然后再按要求多添加一些新功能。調(diào)用的格式是使用“parent:方法名”在子類的重載方法中調(diào)用父類中被覆蓋的方法。將上例中的代碼修改一下,在子類重寫的構(gòu)造方法中使用“parent::__construct()”調(diào)用父類中被覆蓋的構(gòu)造方法,再多添加一條對子類中新擴(kuò)展的成員屬性初始化的代碼。在子類中重寫的say()方法中使用“parent::say()”調(diào)用父類中被覆蓋的say()方法,再添加上輸出子類成員屬性的功能。
代碼如下所示:
<?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>"; } } //聲明一個學(xué)生類,使用extends關(guān)鍵字?jǐn)U展(繼承)person類 class Student extends Person { private $school; //在學(xué)生類中聲明一個所在學(xué)校school的成員屬性 //覆蓋父類中的構(gòu)造方法,在參數(shù)列表中添加一個學(xué)校屬性,用來創(chuàng)建對象并初始化成員屬性 function __construct($name="",$sex="男",$age=1,$school=""){ //調(diào)用父類中被覆蓋的構(gòu)造方法,為從父類中集成過來額出行賦初值 parent::__construct($name,$sex,$age); $this ->school = $school; } function study(){ echo $this ->name."正在".$this ->school."學(xué)習(xí)<br>"; } //定義一個和父類中同名的方法,將父類中的說話方法覆蓋并重寫,多說出所在的學(xué)校名稱 function say(){ parent::say(); //調(diào)用父類中被本方法覆蓋掉的方法 echo "在".$this ->school."學(xué)校上學(xué)<br>"; } } $student= new Student("張三","男",20,"edu"); //創(chuàng)建一個學(xué)生對象,并傳給一個學(xué)校名稱參數(shù) $student -> say(); //調(diào)用學(xué)生類中覆蓋父類的說話方法 ?>
上面的例子輸出的結(jié)果和前一個例子是一樣的,但在本例中通過在子類中直接調(diào)用父類中被覆蓋的方法要簡便很多。另外,在子類覆蓋父類的方法時一定要注意,在子類中重寫的方法訪問權(quán)限一定不能低于父類被覆蓋的方法的訪問權(quán)限。例如,如果父類中的訪問權(quán)限是protected,那么在子類中重寫的方法的權(quán)限就要是protected或public。
以上內(nèi)容是小編給大家介紹的PHP中子類重載父類的方法【parent::方法名】的相關(guān)內(nèi)容,希望對大家有所幫助!如果大家想了解更多資訊,敬請關(guān)注腳本之家網(wǎng)站!
- 解決PHP Opcache 緩存刷新、代碼重載出現(xiàn)無法更新代碼的問題
- php 使用 __call實現(xiàn)重載功能示例
- PHP面向?qū)ο蟪绦蛟O(shè)計模擬一般面向?qū)ο笳Z言中的方法重載(overload)示例
- PHP面相對象中的重載與重寫
- PHP面向?qū)ο缶幊讨钊肜斫夥椒ㄖ剌d與方法覆蓋(多態(tài))
- php函數(shù)重載的替代方法--偽重載詳解
- php繼承中方法重載(覆蓋)的應(yīng)用場合
- PHP使用方法重載實現(xiàn)動態(tài)創(chuàng)建屬性的get和set方法
- PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例
- php面向?qū)ο笕ヂ?(八)重載新的方法
- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- PHP重載基礎(chǔ)知識回顧
相關(guān)文章
ThinkPHP3.1.x修改成功與失敗跳轉(zhuǎn)頁面的方法
這篇文章主要介紹了ThinkPHP3.1.x修改成功與失敗跳轉(zhuǎn)頁面的方法,涉及thinkPHP底層源文件中相關(guān)跳轉(zhuǎn)代碼的設(shè)置與修改操作技巧,需要的朋友可以參考下2017-09-09php使用curl和正則表達(dá)式抓取網(wǎng)頁數(shù)據(jù)示例
這篇文章主要介紹了php使用curl和正則表達(dá)式抓取網(wǎng)頁數(shù)據(jù)示例,這里是抓取某網(wǎng)站的小說,需要的朋友可以修改一下抓取其它數(shù)據(jù)2014-04-04PHP連接和操作MySQL數(shù)據(jù)庫基礎(chǔ)教程
這篇文章主要介紹了PHP連接和操作MySQL數(shù)據(jù)庫基礎(chǔ)教程,本文講解了mysql擴(kuò)展、連接數(shù)據(jù)庫、與數(shù)據(jù)庫交互等內(nèi)容,需要的朋友可以參考下2014-09-09windows環(huán)境下使用Composer安裝ThinkPHP5
本文給大家分享的是在windows環(huán)境下使用Composer安裝ThinkPHP5的具體步驟和方法,非常的簡單實用,有需要的小伙伴可以參考下2018-05-05thinkphp3.2實現(xiàn)在線留言提交驗證碼功能
這篇文章主要為大家詳細(xì)介紹了TP3.2寫提交的驗證碼驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07PHPStorm2020.1永久激活及下載更新至2020(推薦)
這篇文章主要介紹了PHPStorm2020.1永久激活及下載更新至2020,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Thinkphp 框架配置操作之動態(tài)配置、擴(kuò)展配置及批量配置實例分析
這篇文章主要介紹了Thinkphp 框架配置操作之動態(tài)配置、擴(kuò)展配置及批量配置,結(jié)合實例形式分析了Thinkphp配置操作中動態(tài)配置、擴(kuò)展配置及批量配置基本原理、實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下2020-05-05