0%

[PHP] Lesson 7 PHP的物件導向程式設計

物件導向是一種程式設計的方法,其它的程式設計方法還有結構式的程式設計、函式型的程式設計等等….etc。

每種程式語言都會根據自己的特性,發展出不同的物件導向規範,因此在接觸物件導向程式設計時,一定要先對該項程式語言有一定程度的了解,以免弄巧成拙。

本章節只會先提到最基本的類別宣告及使用。

物件導向程式設計的使用前提

  • 中大型以上的專案會比較適合
  • 能透過抽象化來建立規範
  • 考量未來擴充功能的需要
  • 中長期維護的需要
  • 適合團隊分工的開發流程
  • 適合模組化的系統設計方式

物件導向三大特性介紹

繼承

承接父類別的特性,然後擴充子類別的專屬特性

  • 使用關鍵字extends
  • 可繼承父類別public ,protect屬性的成員及方法
  • 繼承後的類別可以覆寫父類別的成員及方法
  • 單一繼承

舉例:
動物這一類別下有界->門->綱->目->科->屬->種的繼承關係
貓,獅,石虎都是繼承自貓科

封裝

定義類別內成員或方法的權限,區隔出外部和內部的關係

  • 使用關鍵字public , protect private
  • 未宣告權限則預設為public
    • Public -> 外部可以自由存取
    • Protect -> 內部和有繼承關係的可以存取
    • Private -> 僅限類別內部取用

舉例:
動物的類別中有可供外界辦識的毛色,體積,叫聲,運動方式等等(public)
同一類別繼承關係中都會具有的如貓父母的毛色,影響下一代的看色,同一族群的棲息地>等等(protect)
動物的類別中有僅供個體專屬的比如個性(private)

多型

同樣的行為或方法,因為所屬的物件不同而呈現不同的表現

  • 多型是透過繼承所產生的一種應用
  • 透過父類別,讓子類別可以呈現不同的表現
  • PHP因為沒有嚴格的資料型態宣告機制,因此在多型的表現上比較不明顯,因此也有人認為PHP沒有多型這個特型

舉例:
貓,獅,石虎各有不同的叫聲
透過父類別”貓科”來指定一個方法”叫”
透過 instansOf方法來判斷只要是貓科就執行”叫”

類別(CLASS)的宣告

  • 針對物件的抽象化宣告
  • 所謂的抽象化指的是不給定明確的值或內容,僅就對像的值或內容做一個概略的描述

    比如:
    生物都有一段壽命—生物和壽命都被抽象化
    狗的平均壽命為20歲—明確的指出狗這個生物及壽命的期間

  • 包含建構式,成員,方法

    建構式—指物件被實體化時會執行的程式
    成員—或稱為屬性,指物件具有的特性,比如人有年齡,身高
    方法—或稱為行為,指物件可以進行的操作,比如人會走路,跳高

  • 類別宣告:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    Class Animal{
    $type='animal';
    $name='John';
    $hair_color="brown";

    public function __constructor(){
    //建構式內容
    }

    public function run(){
    //公開行為內容
    }

    private function speed(){
    //私有行為內容
    }

    }

界面(INTERFACE)

  • 針對類別進行抽象的宣告
  • 包含成員,方法
  • 成員只能是常數成員
  • 方法不需要實作
  • 類別可以實作多個介面
  • 介面宣告:
    1
    2
    3
    4
    5
    interface Animal{
    const type=“animal” //必需是常數
    public function sound(){ //不需要實作內容 }
    public function run(){ //不需要實作內容 }
    }