介紹
物件導向三大特性:封裝(Encapsulation)、繼承(Inheritance)、多型(Polymorphism),此三者具有次序性 , 沒有封裝就不可能有繼承 、沒有繼承就不可能有多型。
由於三大特性的運用跟類別(class)、抽象類別(abstract)、介面(interface)等特性跟運用息息相關,建議先熟悉類別(class)、抽象類別(abstract)、介面(interface) 的運用在來了解物件導向三大特性會比較快上手。
封裝
封裝就是把程式包成類別並將物件細節隱藏起來,不讓大家隨意去操作物件方法。
- 類別(Class)及物件(Object)
- public、protected、private
<?php class Dog { public function move() { echo '跑'; } public function sleep() { echo '睡'; } } class Bird { public function move() { echo '飛'; } public function sleep() { echo '睡'; } } //實作Dog類別 $dog = new Dog(); //實作Bird類別 $bird = new Bird(); $dog->move(); //跑 $bird->move(); //飛
繼承
子類別(Subclass)會把父類別(Superclass)的東西都「繼承」下來 包括屬性跟方法。繼承是一種「is-a」的關係。
例如:狗是一種動物(Dog is an Animal)
<?php abstract class Animal { public function sleep() { echo '睡'; } } class Dog extends Animal { public function move() { echo '跑'; } } class Bird extends Animal { public function move() { echo '飛'; } } $dog = new Dog(); $dog->sleep(); //睡 $bird = new Bird(); $bird->sleep(); //睡
多型
多型是指一個物件參考可以在不同環境下,扮演不同角色的特性,指向不同的物件實體。
abstract class Animal { public function sleep() { echo '睡'; } } class Dog extends Animal { public function move() { echo '跑'; } } class Bird extends Animal { public function move() { echo '飛'; } } class Action { public function actionMove(Animal $obj) { $obj->move(); } } $dog = new Dog(); $bird = new Bird(); $action = new Action(); $action->actionMove($dog); $action->actionMove($bird);
相關文章
- PHP物件導向 – 三大特性:封裝(Encapsulation)、繼承(Inheritance)、多型(Polymorphism)
- PHP物件導向 – 單一職責(Single Responsibility Principle, SRP)
- PHP物件導向 – 開放封閉(Open Closed Principle, OCP)
- PHP物件導向 – 里氏替換(Liskov Substitution Principle, LSP)
- PHP物件導向 – 最小知識(Least Knowledge Principle, LKP)
- PHP物件導向 – 介面隔離(Interface Segregation Principle, ISP)
- PHP物件導向 – 依賴反轉(Dependency-Inversion Principle, DIP)