PHP中子類重載父類的方法介紹
在PHP中不能定義重名的函數,也包括不能再同一個類中定義重名的方法,所以也就沒有方法重載。單在子類中可以定義和父類重名的方法,因為父類的方法已經在子類中存在,這樣在子類中就可以把從父類中繼承過來的方法重寫。
子類中重載父類的方法就是在子類中覆蓋從父類中繼承過來的方法,父類中的方法被子類繼承過來不就可以直接使用嗎?為什麼還要重載呢?因為有一些情況我們必須要覆蓋的。例如,有一個“鳥”類,在這個類中定義了鳥的通用方法“飛翔”。將“鴕鳥”類作為它的子類,就會將“飛翔”的方法繼承過來,但只要一調用“鴕鳥”類中的這個“飛翔”的方法,鴕鳥就會飛走。雖然鴕鳥是不會飛的,但其他特性都具有“鳥類”的'特性,所以在聲明“鴕鳥”類時還是可以繼承“鳥”類的,但必須在“鴕鳥”類中將“鳥”類中繼承過來的“飛翔”方法改寫,就需要在子類中重載父類中的方法。
在下面的例子中,聲明的Person類中有一個“説話”方法,Student類繼承Person類後可以直接使用“説話”方法。但Person類中的“説話”方法只能説出它自己的成員屬性,而Student類對Person類進行了擴展,多添加了幾個新的成員屬性。代碼如下所示:
name = $name;$this ->sex = $sex;$this ->age = $age;}//在人類中聲明一個通用的説話方法,介紹一下自己function say(){echo "我的名字:".$this-> name.",性別:".$this ->sex.",年齡:".$this ->age."。
";}}//聲明一個學生類,使用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."學習
";}//定義一個和父類中同名的方法,將父類中的説話方法覆蓋並重寫,多説出所在的學校名稱function say(){echo "我的名字:".$this ->name.",性別:".$this ->sex.",年齡:".$this ->age.",在".$this ->school."學校上學
";}}$student= new Student("張三","男",20,"edu"); //創建一個學生對象,並傳給一個學校名稱參數$student -> say(); //調用學生類中覆蓋父類的説話方法?>
改程序運行後輸出的結果為:
我的名字叫:張三,性別:男,我的年齡是:20,在edu學校上學
在PHP中,提供了在子類重載的方法中調用父類被覆蓋方法的功能。這樣就可以在子類重寫的方法中,繼續使用從父類繼承過來並被覆蓋的方法,然後再按要求多添加一些新功能。調用的格式是使用“parent:方法名”在子類的重載方法中調用父類中被覆蓋的方法。將上例中的代碼修改一下,在子類重寫的構造方法中使用“parent::__construct()”調用父類中被覆蓋的構造方法,再多添加一條對子類中新擴展的成員屬性初始化的代碼。在子類中重寫的say()方法中使用“parent::say()”調用父類中被覆蓋的say()方法,再添加上輸出子類成員屬性的功能。
代碼如下所示:
name = $name;$this ->sex = $sex;$this ->age = $age;}//在人類中聲明一個通用的説話方法,介紹一下自己function say(){echo "我的名字:".$this-> name.",性別:".$this ->sex.",年齡:".$this ->age."。
";}}//聲明一個學生類,使用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."學習
";}//定義一個和父類中同名的方法,將父類中的説話方法覆蓋並重寫,多説出所在的學校名稱function say(){parent::say(); //調用父類中被本方法覆蓋掉的方法echo "在".$this ->school."學校上學
";}}$student= new Student("張三","男",20,"edu"); //創建一個學生對象,並傳給一個學校名稱參數$student -> say(); //調用學生類中覆蓋父類的説話方法?>
上面的例子輸出的結果和前一個例子是一樣的,但在本例中通過在子類中直接調用父類中被覆蓋的方法要簡便很多。另外,在子類覆蓋父類的方法時一定要注意,在子類中重寫的方法訪問權限一定不能低於父類被覆蓋的方法的訪問權限。例如,如果父類中的訪問權限是protected,那麼在子類中重寫的方法的權限就要是protected或public。
-
網頁設計的佈局
網頁設計的工作目標,是通過使用更合理的顏色、字體、圖片、樣式進行頁面設計美化,在功能限定的情況下,儘可能給予用户完美的視覺體驗。以下是小編為您帶來的網頁設計的佈局,看看吧!網頁設計的佈局11、響應式網頁設計響應式網頁設計是網頁設計的一種技術,可在N多種瀏...
-
網頁設計黃金配色原則是什麼
身為網頁設計新手的你,是不是還在糾結於你製作的網頁找不到一組完美的配色方案?在本教程中我們將與你分享6條肯定會火,並且“錯不了”的指導方針,你可以按照這些原則把握最基本的色彩規律。現在我們分享的這些原則都不是規則,你會在你的職業生涯中創造出更多的配色...
-
Dreamweaver輸入的文本字體怎樣加粗
Dreamweaver輸入的文本字體怎麼加粗?Dreamweaver中想要加粗輸入的文本,該怎麼加粗呢?這都是最基礎的教程,很簡單,需要的朋友可以參考下,下面就跟隨小編一起來看看吧!Dreamweaver怎麼給字體加粗,下面我們就來看看詳細的.教程。1、打開我的軟件2、文件新建一個3、新建...
-
JavaScript基本語法分析
一、JavaScript基本語法。(一)數據類型與變量類型。整數,小數,佈局,字符串,日期時間,數組強制轉換:parseInt()parseFloat()isNaN()(二)數組var數組名=newArray([長度]);//“假冒”數組th-長度a[下標]=值。a[下標](三)函數複製代碼代碼如下:function函數名(形參){}function...