php繼承父類方法:使用student類繼承person類,**為【class student extends person】。
php繼承父類方法:
在php中不能定義重名的函式,也包括不能再同乙個類中定義重名的方法,所以也就沒有方法過載。單在子類中可以定義和父類重名的方法,因為父類的方法已經在子類中存在,這樣在子類中就可以把從父類中繼承過來的方法重寫。
子類中過載父類的方法就是在子類中覆蓋從父類中繼承過來的方法,父類中的方法被子類繼承過來不就可以直接使用嗎?為什麼還要過載呢?因為有一些情況我們必須要覆蓋的。例如,有乙個「鳥」類,在這個類中定義了鳥的通用方法「飛翔」。將「鴕鳥」類作為它的子類,就會將「飛翔」的方法繼承過來,但只要一呼叫「鴕鳥」類中的這個「飛翔」的方法,鴕鳥就會飛走。雖然鴕鳥是不會飛的,但其他特性都具有「鳥類」的特性,所以在宣告「鴕鳥」類時還是可以繼承「鳥」類的,但必須在「鴕鳥」類中將「鳥」類中繼承過來的「飛翔」方法改寫,就需要在子類中過載父類中的方法。
在下面的例子中,宣告的person類中有乙個「說話」方法,student類繼承person類後可以直接使用「說話」方法。但person類中的「說話」方法只能說出它自己的成員屬性,而student類對person類進行了擴充套件,多新增了幾個新的成員屬性。**如下所示:<?php
class person{
protected $name;
protected $***;
protected $wage;
function __construct($name="",$***="男",$age=1){
$this ->name = $name;
$this ->*** = $***;
$this ->age = $age;
//在人類中宣告乙個通用的說話方法,介紹一下自己
function say(){
echo "我的名字:".$this-> name.",性別:".$this ->***.",年齡:".$this ->age."。
";//宣告乙個學生類,使用extends關鍵字擴充套件(繼承)person類
class student extends person {
private $school; //在學生類中宣告乙個所在學校school的成員屬性
//覆蓋父類中的構造方法,在引數列表中新增乙個學校屬性,用來建立物件並初始化成員屬性
function __construct($name="",$***="男",$age=1,$school=""){
$this ->name = $name;
$this ->*** = $***;
$this ->age = $age;
$this ->school = $school;
function study(){
echo $this ->name."正在".$this ->school."學習
";//定義乙個和父類中同名的方法,將父類中的說話方法覆蓋並重寫,多說出所在的學校名稱
function say(){
echo "我的名字:".$this ->name.",性別:".$this ->***.",年齡:".$this ->age.",在".$this ->school."學校上學
";$student= new student("張三","男",20,"edu"); //建立乙個學生物件,並傳給乙個學校名稱引數
$student -> say(); //呼叫學生類中覆蓋父類的說話方法
改程式執行後輸出的結果為:我的名字叫:張三,性別:男,我的年齡是:20,在..學校上學
在php中,提供了在子類過載的方法中呼叫父類被覆蓋方法的功能。這樣就可以在子類重寫的方法中,繼續使用從父類繼承過來並被覆蓋的方法,然後再按要求多新增一些新功能。呼叫的格式是使用「parent:方法名」在子類的過載方法中呼叫父類中被覆蓋的方法。將上例中的**修改一下,在子類重寫的構造方法中使用「parent::__construct()」呼叫父類中被覆蓋的構造方法,再多新增一條對子類中新擴充套件的成員屬性初始化的**。在子類中重寫的say()方法中使用「parent::say()」呼叫父類中被覆蓋的say()方法,再新增上輸出子類成員屬性的功能。
**如下所示:<?php
class person{
protected $name;
protected $***;
protected $wage;
function __construct($name="",$***="男",$age=1){
$this ->name = $name;
$this ->*** = $***;
$this ->age = $age;
//在人類中宣告乙個通用的說話方法,介紹一下自己
function say(){
echo "我的名字:".$this-> name.",性別:".$this ->***.",年齡:".$this ->age."。
";//宣告乙個學生類,使用extends關鍵字擴充套件(繼承)person類
class student extends person {
private $school; //在學生類中宣告乙個所在學校school的成員屬性
//覆蓋父類中的構造方法,在引數列表中新增乙個學校屬性,用來建立物件並初始化成員屬性
function __construct($name="",$***="男",$age=1,$school=""){
//呼叫父類中被覆蓋的構造方法,為從父類中整合過來額出行賦初值
parent::__construct($name,$***,$age);
$this ->school = $school;
function study(){
echo $this ->name."正在".$this ->school."學習
";//定義乙個和父類中同名的方法,將父類中的說話方法覆蓋並重寫,多說出所在的學校名稱
function say(){
parent::say(); //呼叫父類中被本方法覆蓋掉的方法
echo "在".$this ->school."學校上學
";$student= new student("張三","男",20,"edu"); //建立乙個學生物件,並傳給乙個學校名稱引數
$student -> say(); //呼叫學生類中覆蓋父類的說話方法
php父類繼承子類 PHP父類方法繼承問題
有幾個類的很相似,只是其方法對資料處理的邏輯和最後資料輸出的結果有些差別,可以通過這樣的思路實現嗎?1.思路一,通過修改抽象函式邏輯實現返回值不同abstract class parentsclass child extends parentsclass child extends parents ...
php不呼叫父類構造 PHP 繼承學習筆記
繼承是物件導向的乙個重要概念,通過使用繼承可以重用已有類的屬性和方法。被繼承的類叫做父類,獲得繼承權的類稱為子類。1.繼承乙個類 例 extends.php class fruit 建立乙個fruit類 public function construct 公有 建構函式 class banana e...
php子類與父類間的屬性繼承
父類中被宣告為public或protected的屬性可以被子類繼承,而且在子類中的修改會影響到父類,父類中的修改也同樣會影響子類。父類中宣告為private的屬性不會被繼承,bookproduct類建構函式中的語句 this mshopname myshop 只是為子類中的屬性mshopname賦值...