首頁 >後端開發 >PHP問題 >php方法重寫是指什麼

php方法重寫是指什麼

藏色散人
藏色散人原創
2020-11-24 09:37:412602瀏覽

php方法重寫是指把父類別中繼承過來的方法覆寫掉,也就是重寫父類​​別方法,其方法如:先定義一個建構方法參數;接著定義一個子類別把使用“ extends」關鍵字來繼承;最後重寫父類別方法即可。

php方法重寫是指什麼

推薦:《PHP影片教學

  • 本方法適用於任何品牌的電腦

PHP物件導向程式設計(OOP)之方法重寫(override)操作範例

本文實例講述了PHP物件導向程式設計(OOP)之方法重寫(override)操作。分享給大家供大家參考,具體如下:

因為PHP是弱型別的語言, 所以在方法的參數中本身就可以接收不同類型的數據,又因為PHP的方法可以接收不定個數的參數,所以透過傳遞不同個數的參數來呼叫不相同方法名的不同方法也是不成立的,所以php是不能重載的。

雖然說在PHP裡面不能定義同名的方法, 但是在父子關係的兩個類別中,我們可以在子類別中定義和父類別同名的方法,這樣就把父類別中繼承過來的方法覆蓋掉了(重寫父類別方法)。

<?php
class Person
{
//下面是人的成员属性
var $name; //人的名子
var $sex; //人的性别
var $age; //人的年龄
//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function __construct($name, $sex, $age) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
//这个人可以说话的方法, 说出自己的属性
function say() {
echo "my name is:" . $this->name . " sex:" . $this->sex . " my age is:" . $this->age;
}
}
//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}
?>

另外在子類別覆寫父類別的方法時也要注意一點,子類別中方法的存取權限一定不能低於父類別被覆寫方法的存取權限,也就是一定要高於或等於父類別方法的存取權限。

例如,如果父類別方法的存取權限是protected,那麼子類別中要覆寫的權限就要是protected和public,如果父類別的方法是public那麼子類別中要覆寫的方法只能也是public,總之子類別中的方法總是要高於或等於父類別被覆寫方法的存取權限。

上面的例子, 我們就在「Student」子類別裡覆寫了繼承父類別裡面的」say()」的方法,透過覆寫我們就實作了對「方法」擴充。但是,像這樣做雖然解決了我們上面說的問題,但是在實際開發中,一個方法不可能就一條程式碼或幾條程式碼,比如說「Person」類別裡面的「say()」方法有裡面有100個程式碼,如果我們想對這個方法覆蓋保留原有的功能外加上一點點功能,就要把原有的100條代碼重寫一次, 再加上擴展的幾條代碼,這還算是好的,而有的情況,父類別中的方法是看不見原程式碼的,這時候你要怎麼去重寫原有的程式碼呢?我們也有解決的辦法,就是在子類別這個方法中可以呼叫到父類別中被覆寫的方法, 也就是把被覆寫的方法原有的功能拿過來再加上自己的一點功能,可以透過兩種方法實作在子類別的方法中呼叫父類別被覆寫的方法:

一種是使用父類別的「類別名稱::「來呼叫父類別中被覆寫的方法;

#一種是使用「parent::」的方試來呼叫父類別中被覆寫的方法;

//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
//使用父类的"类名::"来调用父类中被覆盖的方法;
// Person::say();
//或者使用"parent::"的方试来调用父类中被覆盖的方法;
parent::say();
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}

現在用兩種方式都可以存取到父類別中被覆寫的方法,我們選那種方式最好呢?使用者可能會發現自己寫的程式碼存取了父類別的變數和函數。如果子類別非常精煉或父類非 常專業化的時候尤其是這樣。不要用程式碼中父類別文字上的名字,應該用特殊的名字 parent,它指的就是子類別在 extends 宣告中所指的父類別的名字。這樣做可以避免在多個地方使用父類別的名字。如果繼承樹在實作的過程中要修改,只要簡單地修改類別中 extends 宣告的部分。

以上是php方法重寫是指什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn