## 抽象類abstract class
abstract class 不能被直接實例化,抽象類中定義子類需要的方法。
一個簡單列子通俗說明下:當你發現你的很多類里面用很多方法你不斷的在重復寫,那你就可以考慮使用抽象類了,你可能會說“我不是可以重寫一個類每個公共類我個實例化一個這個公共類,調用相同的方法就可以了”,這里是可以,實際上抽象類做的工作也就是這個,不過他省去了你實例化的這個步驟,讓你就像直接調用PHP抽象類abstract方法一樣方便,而且你還可以重載這個方法。
~~~
abstract class shopWriter{
public function writer();
}
class XmlWriter extends shopWriter{
public function writer(){
...實現具體的xml方法
}
}
class jsonWriter extends shopWriter{
public function writer(){
...實現具體的json方法
}
}
~~~
以上案例,我們創建了兩個類,每個類都有自己的write()方法實現。第一個輸出XML,第二個輸出json。
## 接口 interface?
接口類提供了具體實現的標準,而interface則是純粹的模板。接口可包含熟悉和方法申明,但是方法體為空
通俗講:當有很多人一起開發一個項目時,可能都會去調用別人寫的一些類,那你就會問,我怎么知道他的某個功能的實現方法是怎么命名的呢,這個時候php接口類就起到作用了,當我們定義了一個接口類時,它里面的方式是下面的子類必須實現的
定義一個接口:
~~~
interface chargeable{
public function getPrice();
}
~~~
實現chargeable接口
~~~
class ShopProduct implements chargeable{
return $this->price ;
}
~~~
**結論**:
抽象類就是一個類的服務提供商,擁有眾多服務,你不用必須用,當需要的時候你來用就可以,如果你覺得不提供服務不滿意,你還可以自己來做。
接口類就是一個類的領導者,指明方向,子類必須完成它指定方法。
它們的區別:
1.定義抽象類用abstract,接口用interface ,繼承抽象類用extends,繼承接口用mplements
2.抽象類跟類一樣不能多重繼承,但是接口可以多重繼承,用","隔開
3.抽象類不一定只包含抽象方法,可以定義完整的方法,接口不能包含任何完整定義方法
4.抽象類中的方法不必全部重載,但是接口方法必須聲明或者重載
- 前言
- PHP生成對象之設計模式—單例模式
- PHP生成對象之設計模式—工廠方法模式
- PHP之設計模式—適配器模式
- PHP之設計模式—建造者模式(通過選擇mysql,mongo數據庫鏈接類型做說明)
- PHP之設計模式—委托模式
- PHP面向對象學習一:對象基礎實踐
- PHP面向對象學習之二:深入了解面向對象高級特性
- PHP面向對象學習之三:抽象類和接口類的實際作用
- PHP解決問題進化論(整理筆記)
- PHP7新特性整理介紹篇
- php-fpm 與 Nginx優化總結
- Centos+Nginx+PHP7.0編譯安裝(和PHP5.6老版本共存)
- PHP7:Mongodb API使用
- PHP之include/require深入了解
- PHP內核了解:生命周期及運行模式