<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

    PHP5中實現多態的兩種方法實例

    時間:2025-05-08 02:55:27 php語言 我要投稿
    • 相關推薦

    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 = "";

      function __construct($_name) {

      $this->setName($_name);

      }

      function getName() {

      return $this->name;

      }

      function setName($_name) {

      $this->name = $_name;

      }

      function getDiscount() {

      return $this->discount;

      }

      function getGrade() {

      return $this->grade;

      }

      }

      class NormalUser extends AbstractUser

      {

      protected $discount = 1.0;

      protected $grade = "Normal";

      }

      class VipUser extends AbstractUser

      {

      protected $discount = 0.8;

      protected $grade = "VipUser";

      }

      class InnerUser extends AbstractUser

      {

      protected $discount = 0.7;

      protected $grade = "InnerUser";

      }

      interface Product

      {

      function getProductName();

      function getProductPrice();

      }

      interface Book extends Product

      {

      function getAuthor();

      }

      class BookOnline implements Book

      {

      private $productName;

      protected $productPrice;

      protected $Author;

      function __construct($_bookName) {

      $this->productName = $_bookName;

      }

      function getProductName() {

      return $this->productName;

      }

      function getProductPrice() {

      $this->productPrice = 100;

      return $this->productPrice;

      }

      public function getAuthor() {

      $this->Author = "chenfei";

      return $this->Author;

      }

      }

      class Productsettle

      {

      public static function finalPrice(User $_user, Product $_product, $number) {

      $price = $_user->getDiscount() * $_product->getProductPrice() * $number;

      return $price;

      }

      }

      $number = 10;

      $book = new BookOnline("設計模式");

      $user = new NormalUser("tom");

      $price = Productsettle::finalPrice($user, $book, $number);

      $str = "您好,尊敬的" . $user->getName() . "<br />";

      $str .= "您的級別是" . $user->getGrade() . "<br />";

      $str .= "您的折扣是" . $user->getDiscount() . "<br />";

      $str .= "您的價格是" . $price;

      echo $str;

      ?>

    【PHP5中實現多態的兩種方法實例】相關文章:

    PHP中多態如何實現05-06

    Java中的多態用法實例分析04-04

    php實現偽靜態的方法實例11-30

    PHP5中的魔術方法詳解04-19

    php兩種無限分類方法實例06-15

    php中實現回刪功能實例01-26

    PHP5異常處理分析實例08-07

    兩種實現表單驗證的javascript方法04-27

    HTML實現頁面自動跳轉的方法有哪些(實例)07-31

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人