1. 介面
在php程式設計語言中介面是一個抽象類別型,是抽象方法的集合。介面通常以interface來聲明。一個類通過實現介面的方式,從而來實現介面的方法(抽象方法)。
介面定義:
interface InterAnimal{ public function speak(); public function name($name); }//介面實現 class cat implements InterAnimal{ public function speak(){ echo "speak"; } public function name($name){ echo "My name is ".$name; } }
特別注意:
* 類全部為抽象方法(不需要聲明abstract)
* 介面抽象方法是public
* 成員(欄位)必須是常量
2. 繼承
繼承自另一個類的類被稱為該類的子類。這種關係通常用父類和孩子來比喻。子類將繼
承父類的特性。這些特性由屬性和方法組成。子類可以增加父類之外的新功能,因此子類也
被稱為父類的“擴充”。
在PHP中,類繼承通過extends關鍵字實現。繼承自其他類的類成為子類或衍生類別,子
類所繼承的類成為父類或基類。
class Computer { private $_name = '聯想'; public function __get($_key) { return $this->$_key; } public function run() { echo '父類run方法'; }}class NoteBookComputer extends Computer {}$notebookcomputer = new NoteBookComputer ();$notebookcomputer->run (); //繼承父類中的run()方法echo $notebookcomputer->_name; //通過魔法函數__get()獲得私人欄位
特別注意:
有時候並不需要父類的欄位和方法,那麼可以通過子類的重寫來修改父類的欄位和方法。
class Computer { public $_name = '聯想'; protected function run() { echo '我是父類'; }}//重寫其欄位、方法class NoteBookComputer extends Computer { public $_name = 'IBM'; public function run() { echo '我是子類'; }}
通過重寫調用父類的方法
有的時候,我們需要通過重寫的方法裡能夠調用父類的方法內容,這個時候就必須使用
文法:父類名::方法()、parent::方法()即可調用。
final關鍵字可以防止類被繼承,有些時候只想做個獨立的類,不想被其他類繼承使用。
3. 抽象類別和方法
抽象類別特性:
* 抽象類別不能產生執行個體對象,只能被繼承;
* 抽象方法一定在抽象類別中,抽象類別中不一定有抽象方法;
* 繼承一個抽象類別時,子類必須重寫父類中所有抽象方法;
* 被定義為抽象的方法只是聲明其調用方式(參數),並不實現。
abstract class Computer { abstract function run();}final class NotebookComputer extends Computer { public function run() { echo '抽象類別的實現'; }}
3. 多態
多態是指OOP 能夠根據使用類的上下文來重新定義或改變類的性質或行為,或者說介面的多種不同的實現方式即為多態。
interface Computer { public function version(); public function work();}class NotebookComputer implements Computer { public function version() { echo '聯想<br>'; } public function work() { echo '筆記本正在隨時攜帶運行!'; }}class desktopComputer implements Computer { public function version() { echo 'IBM'; } public function work() { echo '台式電腦正在工作站運行!'; }}class Person { public function run($type) { $type->version (); $type->work (); }}$person = new Person ();$desktopcomputer = new desktopComputer ();$notebookcomputer = new NoteBookComputer ();$person->run ( $notebookcomputer );