28
PHP 物件導向 - 基礎觀念篇 瞭解 PHP 物件導向的開發方式

PHP 物件導向 - 基礎觀念篇

  • Upload
    jace-ju

  • View
    13.009

  • Download
    5

Embed Size (px)

DESCRIPTION

哇寶內部教育訓練用教材

Citation preview

Page 1: PHP 物件導向 - 基礎觀念篇

PHP 物件導向 - 基礎觀念篇

瞭解 PHP 物件導向的開發方式

Page 2: PHP 物件導向 - 基礎觀念篇

物件導向@PHP

• 類別?物件?怎麼分?

• 抽象?繼承?多型?

• 變數還是屬性?函式還是方法?

• PHP5 在物件導向上還有哪些特色?

Page 3: PHP 物件導向 - 基礎觀念篇

類別Class

Page 4: PHP 物件導向 - 基礎觀念篇

class Person() {}

類別只是一堆函式的集合嗎?

• 凝聚力

• 物件的藍圖

• 包裝商業邏輯

• 適應性良好

• 不一定要跟現實生活的東西有關聯

• 會佔記憶體空間

Page 5: PHP 物件導向 - 基礎觀念篇

物件Object

Page 6: PHP 物件導向 - 基礎觀念篇

$jace = new Person();

物件和一般變數有什麼不同?

• 能管理自身的狀態

• 可以調用方法或取用屬性

• 物件變數只放位址

Page 7: PHP 物件導向 - 基礎觀念篇

成員Member

Page 8: PHP 物件導向 - 基礎觀念篇

$jace->height & $jace->eat();

屬性即變數?方法即函式?

• 物件成員,用 this

• 屬性可以有常數預設值

• 實作同類別的不同物件,其屬性不會互相干擾

Page 9: PHP 物件導向 - 基礎觀念篇

封裝Encapsulation

Page 10: PHP 物件導向 - 基礎觀念篇

$jace->height = 0 ?

不能任意更改物件內部狀態

• setter 可以對參數值做檢查

• getter 讓我們能在輸出狀態前有改變的機會

Page 11: PHP 物件導向 - 基礎觀念篇

作用域Scope

Page 12: PHP 物件導向 - 基礎觀念篇

private, protected, public, static

定義變數可視範圍

• private: 我的就是我的

• protected: 我和我的子孫可以用

• public: 大家都能用

• static: 影響同型態的所有物件實體

• 類別 static 方法中,不可用 this !

• 方法 local 變數

Page 13: PHP 物件導向 - 基礎觀念篇

繼承Inheritance

Page 14: PHP 物件導向 - 基礎觀念篇

Manager extends Person

不僅僅是復用程式碼

• 共用相同的邏輯

• 覆寫 (override) 不同的邏輯

Page 15: PHP 物件導向 - 基礎觀念篇

抽象Abstraction

Page 16: PHP 物件導向 - 基礎觀念篇

'Person' === get_class($jace)

特意簡化問題

• 概略地來表達事物

Page 17: PHP 物件導向 - 基礎觀念篇

$jace->drive($car);

特意簡化問題

• Neo 開 Ferrari 跑車

• Jace 開 Toyota 小車

• 人開車

Page 18: PHP 物件導向 - 基礎觀念篇

抽象類別Abstract Class

Page 19: PHP 物件導向 - 基礎觀念篇

abstract class Person

不希望被實體化的類別

• 概念類別

• 人、動物、工作…

Page 20: PHP 物件導向 - 基礎觀念篇

多型Polymorphism

Page 21: PHP 物件導向 - 基礎觀念篇

$employee->work()

一視同仁

• 弱型別: Duck Type (只考慮能不能做什麼)

• 強型別:必須是同一個型別或其子類別

Page 22: PHP 物件導向 - 基礎觀念篇

介面Interface

Page 23: PHP 物件導向 - 基礎觀念篇

Car implement Drivable

告訴使用者可以怎麼做

• 只提供方法的宣告

• 類別必須「實作」介面

• 可以實作多個介面

Page 24: PHP 物件導向 - 基礎觀念篇

異常Exception

Page 25: PHP 物件導向 - 基礎觀念篇

$jace->eat($neo)

處理異常錯誤的好方法

• throw

• try … catch

• 一層一層往上拋

Page 26: PHP 物件導向 - 基礎觀念篇

PHP5 特色

Page 27: PHP 物件導向 - 基礎觀念篇

Special

不同於其他語言的特色

• __constructor(), __destructor()

• clone

• magic method (__set, __get, __call, …)

• type hint (通常是強型別語言才有)

Page 28: PHP 物件導向 - 基礎觀念篇

謝謝