首頁  >  文章  >  後端開發  >  php如何實現多態性

php如何實現多態性

青灯夜游
青灯夜游原創
2021-06-02 15:24:354335瀏覽

php實作多態的方法:1、透過實作介面實現多態;2、利用介面與組合,在一個類別中將另外一個類別設定成屬性來模擬多重繼承,透過繼承關係實現多態。

php如何實現多態性

本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦

多態性是指相同的操作或函數、過程可作用於多種類型的物件上並獲得不同的結果。不同的對象,收到相同訊息將可以產生不同的結果,這種現象稱為多態性。

多態性允許每個物件以適合自身的方式去回應共同的訊息。多態性增強了軟體的靈活性和重用性。

在物件導向的軟體開發中,多態性是最重要的部分之一。物件導向程式設計並非只是將相關的方法與資料簡單的結合起來,而是採用物件導向程式設計中的各種要素將現實生活中的各種情境清晰的描述出來。這一小節將對物件導向程式設計中的多態性作詳細的講解。

什麼是多型別

多 態(Polymorphism)字面上就是「多種形狀」。可以理解為多種表現形式,也即「一個對外接口,多個內部實作方法」。在物件導向的理論 中,多態性的一般定義為:同一個操作作用於不同的類別的實例,將產生不同的執行結果。也即不同類別的物件收到相同的訊息時,將會得到不同的結果。

在實際的應用開發中,採用物件導向中的多型主要在於可以將不同的子類別物件當作一個父類別來處理,並且可以屏蔽不同子類別物件之間所存在的差異,寫出通用的程式碼,做出通用的編程,以適應需求的不斷變化。

多型實作條件

多態的實作有三個條件:首先必須有繼承,也就是必須有父類別(或基底類別)及其派生的子類別。其次必須有父類別的引用指向子類別的對象,這是實現多型態最重要的一個條件。最後必須有方法的重寫,即子類別必須對父類別的某些方法根據自己的需求進行重寫,方法名稱和參數都是相同的。

php實作多態的方法:

#1、透過實作介面實作多態

#下面的範例中,UserAdmin類別的靜態方法,要求一個User類型的參數。

在後面的使用中,傳遞了一個實作了User介面的類別NormalUser的實例。程式碼成功運行。

<?
interface User{ // User接口
	public function  getName();
	public function setName($_name);
}
class NormalUser implements User { // 实现接口的类.
	private $name;
	public function getName(){
		return $this->name;
	}
	public function setName($_name){
		$this->name = $_name;
	}
}
class UserAdmin{ //操作.
	public static function  ChangeUserName(User $_user,$_userName){
		$_user->setName($_userName);
	}
}
$normalUser = new NormalUser();
UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.
echo $normalUser->getName();
?>

程式運行結果:

Tom

2、透過繼承關係實現多態

利用介面與組合,在一個類別中將另外一個類別設定成屬性來模擬多重繼承,透過繼承關係實現多型。

下面是類別和子類別的關係。

<?
class User{ // User接口
	public function  getName(){}
}
class NormalUser extends User { // 继承自User类
	private $name;
	public function getName(){
		return $this->name;
	}
	public function setName($_name){
		$this->name = $_name;
	}
}
class UserAdmin{ //操作.
	public static function  ChangeUserName(User $_user,$_userName){
		$_user->setName($_userName);
	}
}
$normalUser = new NormalUser();
UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.
echo $normalUser->getName();
?>

程式運行結果:

Tom

推薦學習:《PHP影片教學

以上是php如何實現多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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