PHP5中實現多型的兩種方法例項
在PHP5中,變數的型別是不確定的,一個變數可以指向任何型別的數值、字串、物件、資源等。我們無法說PHP5中多型的是變數。以下是小編整理的關於在PHP5中多型應用方法,歡迎來閱讀!
我們只能說在PHP5中,多型應用在方法引數的型別提示位置。
一個類的任何子類物件都可以滿足以當前型別作為型別提示的型別要求。
所有實現這個介面的類,都可以滿足以介面型別作為型別提示的方法引數要求。
簡單的說,一個類擁有其父類、和已實現介面的身份。
通過實現介面實現多型
複製程式碼 程式碼如下:
<?php
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();
?>
使用介面與組合模擬多繼承
通過組合模擬多重繼承。
在PHP中不支援多重繼承,如果我們向使用多個類的方法而實現程式碼重用有什麼辦法麼?
那就是組合。在一個類中去將另外一個類設定成屬性。
下面的例子,模擬了多重繼承。
介面例項
寫一個概念性的例子。 我們設計一個線上銷售系統,使用者部分設計如下: 將使用者分為,NormalUser, VipUser, InnerUser 三種。要求根據使用者的不同折扣計算使用者購買產品的價格。並要求為以後擴充套件和維護預留空間。
複製程式碼 程式碼如下:
<?php
interface User
{
public function getName();
public function setName($_name);
public function getDiscount();
}
abstract class AbstractUser implements User
{
private $name = "";
protected $discount = 0;
protected $grade = "";