站長資訊網
最全最豐富的資訊網站

php如何繼承父類方法

php繼承父類方法:使用Student類繼承Person類,代碼為【class Student extends Person{private $school;function __construct($name="",$sex="男"}】。

php如何繼承父類方法

php繼承父類方法:

在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,在..學校上學

在PHP中,提供了在子類重載的方法中調用父類被覆蓋方法的功能。這樣就可以在子類重寫的方法中,繼續使用從父類繼承過來并被覆蓋的方法,然后再按要求多添加一些新功能。調用的格式是使用“parent:方法名”在子類的重載方法中調用父類中被覆蓋的方法。將上例中的代碼修改一下,在子類重寫的構造方法中使用“parent::__construct()”調用父類中被覆蓋的構造方法,再多添加一條對子類中新擴展的成員屬性初始化的代碼。在子類中重寫的say()方法中使用“parent::say()”調用父類中被覆蓋的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>"; } } //聲明一個學生類,使用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(); //調用學生類中覆蓋父類的說話方法 ?>

上面的例子輸出的結果和前一個例子是一樣的,但在本例中通過在子類中直接調用父類中被覆蓋的方法要簡便很多。另外,在子類覆蓋父類的方法時一定要注意,在子類中重寫的方法訪問權限一定不能低于父類被覆蓋的方法的訪問權限。例如,如果父類中的訪問權限是protected,那么在子類中重寫的方法的權限就要是protected或public。

相關免費學習推薦:php編程(視頻)

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
日韩精品一区二区三区视频| 亚洲国产成人精品无码区在线秒播| 日韩免费观看的一级毛片| 国产精品无码一区二区在线 | 香蕉在线精品视频在线观看6| 亚洲日韩中文字幕| 依依成人精品视频在线观看 | 日韩成人免费视频| 国产精品老熟女露脸视频| 精品区2区3区4区产品乱码9| 国产美女在线精品观看| 久久精品国产久精国产果冻传媒| 日韩精品无码专区免费播放| 日本精品一区二区三区在线观看| 亚洲中文字幕久久精品无码喷水| 老司机精品视频在线| 久久se这里只有精品| 国产精品无码无卡无需播放器| www国产亚洲精品久久久| 日韩精品系列产品| 亚洲高清专区日韩精品| 午夜国产精品久久久久| 国产真实乱人偷精品| 国产精品无码MV在线观看| 女人国产香蕉久久精品| 日日夜夜精品免费视频| 日韩人妻高清精品专区| 国产麻豆va精品视频| 国产精品高清m3u8在线播放| 高清国产一级精品毛片基地| 99精品全国免费观看视频| 尤物精品视频一区二区三区| 国自产精品手机在线视频香蕉| 国产精品无码亚洲一区二区三区| 九九精品国产亚洲AV日韩| 精品一区二区三区| 影院成人区精品一区二区婷婷丽春院影视 | 亚洲精品乱码久久久久久V| 亚洲精品色播一区二区| 精品国产性色无码AV网站| 夜精品a一区二区三区|