2021年3月13日 星期六

PHP 介面與抽象類別的應用

設定目標:
  • 了解介面與抽象類別的概念
  • 實作介面與抽象類別的方法

介面概念與使用方法
  1. 介面(interface)
    • 作用:
      • 定義相同的功能名稱,但可以由執行的類別,各自實作功能!
      • 有實作介面的類別,一定要實作內容!
      • 介面可以繼承其他的介面!
      • 類別可以同時執行多個介面!
    • 例:Bark.php (吠叫...)
      <?php
        interface Bark{
          public function bark();
        }
      ?>
      
    • 例:Swim.php (游泳...)
      <?php
        interface Swim{
          public function swim();
        }
      ?>
      
    • 例:Human.php (建一個人類的類別...)
      <?php
        include "Bark.php";
        include "Swim.php";
        class Human implements Bark, Swim{
          public function bark(){
            echo "人類叫聲...是在叫什麼啦!!";
          }
          public function swim(){
            echo "人類在游泳...不是在洗澡嗎?";
          }
        }
      ?>
      
    • 利用一個 demo3.php 來實現上述幾個程式:
      <?php
        include "Human.php";
        $man = new Human();
        echo $man->bark();
        echo $man->swim();
      ?>
      
抽象類別觀念與應用
  1. 抽象類別 (Abstract)
    • 作用
      • 父類別在使用介面之後,必須要實作該介面功能內容!
      • 子類別在繼承父類別之後,如想要改變介面功能內容,必須使用覆寫的方式!
      • 父類別若不想實作介面方法,子類別又需要定義介面功能,可以將父類別抽象化,即可不用實作介面方法!
      • 子類別繼承抽象父類別之後,必須要實作父類別的介面方法!
    • 範例 : 修改 dog.php
      <?php
      include "Bark.php";
      abstract class dog implements Bark {
         // 設定狗的屬性
         public $name;
         public $color;
         public $style;
         
         //設定建構子
         public function __construct($name,$color,$style){
           $this->name = $name;
           $this->color = $color;
           $this->style = $style;
         }
      
         public function dogRun(){
           echo "狗狗跑步中...";
         }
         // 修改狗叫的功能
         public function Bark(){
           //這裡保持空白
         }
      
         public function __destruct(){
           echo "狗狗回家了...";
         }
      }
      ?>
      
    • 範例 : 修改 Poodle.php
      <?php
      include "dog.php";
      
      class Poodle extends dog{
        protected $size;
      
        public function __construct($name,$color,$style,$size){
          parent::__construct($name,$color,$style);
          $this->size = $size;
        }
        // 實作父類別的狗叫 function
        public function Bark(){
          echo "狗叫...但小聲....";
          //呼叫父類別的 dogBark()
        }
      }
      ?>
      
    • 利用 demo2.php 來使用上述程式:
      <?php
        include "Poodle.php";
      
        $mydog = new Poodle("Windy","白色","貴賓狗",30);
        //修改此行
        echo $mydog->Bark();
      ?>
      

本章練習:
  • 修改 dog.php 檔案,使用 Bark.php 介面程式
  • 修改 cat.php 檔案,將 cat 類別抽象化,並且使用 Bark.php 介面程式