PHP 物件導向 - 基礎觀念篇

 瞭解 PHP 物件導向的開發方式
物件導向@PHP
    類別?物件?怎麼分?
•
    抽象?繼承?多型?
•
    變數還是屬性?函式還是方法?
•
    PHP5 在物件導向上還有哪些特色?
•
類別
Class
class Person() {}
類別只是一堆函式的集合嗎?
• 凝聚力
• 物件的藍圖
• 包裝商業邏輯
• 適應性良好
• 不一定要跟現實生活的東西有關聯
• 會佔記憶體空間
物件
Object
$jace = new Person();
物件和一般變數有什麼不同?
• 能管理自身的狀態
• 可以調用方法或取用屬性
• 物件變數只放位址
成員
Member
$jace->height & $jace->eat();
屬性即變數?方法即函式?
• 物件成員,用 this
• 屬性可以有常數預設值
• 實作同類別的不同物件,其屬性不會互相
  干擾
封裝
Encapsulation
$jace->height = 0 ?
不能任意更改物件內部狀態
• setter 可以對參數值做檢查
• getter 讓我們能在輸出狀態前有改變的機
  會
作用域
Scope
private, protected, public, static
定義變數可視範圍
• private: 我的就是我的
• protected: 我和我的子孫可以用
• public: 大家都能用
• static: 影響同型態的所有物件實...
繼承
Inheritance
Manager extends Person
不僅僅是復用程式碼
• 共用相同的邏輯
• 覆寫 (override) 不同的邏輯
抽象
Abstraction
'Person' === get_class($jace)
特意簡化問題
• 概略地來表達事物
$jace->drive($car);
特意簡化問題
• Neo 開 Ferrari 跑車
• Jace 開 Toyota 小車
• 人開車
抽象類別
Abstract Class
abstract class Person
不希望被實體化的類別
• 概念類別
• 人、動物、工作…
多型
Polymorphism
$employee->work()
一視同仁
• 弱型別: Duck Type (只考慮能不能做什麼)
• 強型別:必須是同一個型別或其子類別
介面
Interface
Car implement Drivable
告訴使用者可以怎麼做
• 只提供方法的宣告
• 類別必須「實作」介面
• 可以實作多個介面
異常
Exception
$jace->eat($neo)
處理異常錯誤的好方法
• throw
• try … catch
• 一層一層往上拋
PHP5 特色
Special
不同於其他語言的特色
• __constructor(), __destructor()
• clone
• magic method (__set, __get, __call, …)
• type hint (通常是強型別語...
謝謝
Upcoming SlideShare
Loading in...5
×

PHP 物件導向 - 基礎觀念篇

13,277

Published on

哇寶內部教育訓練用教材

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,277
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
99
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

PHP 物件導向 - 基礎觀念篇

  1. 1. PHP 物件導向 - 基礎觀念篇 瞭解 PHP 物件導向的開發方式
  2. 2. 物件導向@PHP 類別?物件?怎麼分? • 抽象?繼承?多型? • 變數還是屬性?函式還是方法? • PHP5 在物件導向上還有哪些特色? •
  3. 3. 類別 Class
  4. 4. class Person() {} 類別只是一堆函式的集合嗎? • 凝聚力 • 物件的藍圖 • 包裝商業邏輯 • 適應性良好 • 不一定要跟現實生活的東西有關聯 • 會佔記憶體空間
  5. 5. 物件 Object
  6. 6. $jace = new Person(); 物件和一般變數有什麼不同? • 能管理自身的狀態 • 可以調用方法或取用屬性 • 物件變數只放位址
  7. 7. 成員 Member
  8. 8. $jace->height & $jace->eat(); 屬性即變數?方法即函式? • 物件成員,用 this • 屬性可以有常數預設值 • 實作同類別的不同物件,其屬性不會互相 干擾
  9. 9. 封裝 Encapsulation
  10. 10. $jace->height = 0 ? 不能任意更改物件內部狀態 • setter 可以對參數值做檢查 • getter 讓我們能在輸出狀態前有改變的機 會
  11. 11. 作用域 Scope
  12. 12. private, protected, public, static 定義變數可視範圍 • private: 我的就是我的 • protected: 我和我的子孫可以用 • public: 大家都能用 • static: 影響同型態的所有物件實體 • 類別 static 方法中,不可用 this ! • 方法 local 變數
  13. 13. 繼承 Inheritance
  14. 14. Manager extends Person 不僅僅是復用程式碼 • 共用相同的邏輯 • 覆寫 (override) 不同的邏輯
  15. 15. 抽象 Abstraction
  16. 16. 'Person' === get_class($jace) 特意簡化問題 • 概略地來表達事物
  17. 17. $jace->drive($car); 特意簡化問題 • Neo 開 Ferrari 跑車 • Jace 開 Toyota 小車 • 人開車
  18. 18. 抽象類別 Abstract Class
  19. 19. abstract class Person 不希望被實體化的類別 • 概念類別 • 人、動物、工作…
  20. 20. 多型 Polymorphism
  21. 21. $employee->work() 一視同仁 • 弱型別: Duck Type (只考慮能不能做什麼) • 強型別:必須是同一個型別或其子類別
  22. 22. 介面 Interface
  23. 23. Car implement Drivable 告訴使用者可以怎麼做 • 只提供方法的宣告 • 類別必須「實作」介面 • 可以實作多個介面
  24. 24. 異常 Exception
  25. 25. $jace->eat($neo) 處理異常錯誤的好方法 • throw • try … catch • 一層一層往上拋
  26. 26. PHP5 特色
  27. 27. Special 不同於其他語言的特色 • __constructor(), __destructor() • clone • magic method (__set, __get, __call, …) • type hint (通常是強型別語言才有)
  28. 28. 謝謝
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×