php 怎麼繼承父類的變數 php如何繼承父類方法

2021-10-22 21:55:00 字數 3197 閱讀 8731

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賦值...