2011-12-18 48 views
8

我一直有一個困難時期,在PHP對象編碼時(可能是其他語言我想象)當使用接口在PHP

從我瞭解你理解接口的實際價值,使用Interface強制執行或者保證當某個類正在使用Interface時該類將具有在該類內的Interface中定義的方法。

因此,從我使用它們的小知識來看,這並不意味着當定義需要這些方法的多於一個類時,纔會發現Interface有利嗎?

要更清楚一點,如果我有一個班級做了一件事,而其他班級不需要做那樣的事情,那麼在該班級上使用Interface將毫無意義?

所以你不會在每個課堂上使用Interface你對嗎?

PS)如果你投這個問題爲exact duplicate,那麼你沒讀過的問題,只有我讀過大部分類似的問題標題已經

+2

這可能對您的情況很有意思:http://stackoverflow.com/questions/20463/what-is-the-point-of-interfaces-in-php – Quasdunk 2011-12-18 14:53:07

+3

是的,如果您的界面沒有任何好處知道這隻會是一個單一的實現。 – 2011-12-18 14:56:06

+0

@Quasdunk這是關於這個話題的更好的閱讀之一,謝謝 – JasonDavis 2011-12-18 15:04:24

回答

10

據我瞭解您使用的接口強制或保證 當一個類正在使用一個接口,該類將在該類的接口中定義 方法。

這實際上只是交易的一半(技術部分)。還有所有重要的建築一半,當你消耗的界面出現,它是這樣的:

function feed(IAnimal $interface) { 
    // ... 
} 

(或者說是記錄了「工廠」函數返回一個實現IAnimal將一個實例也作爲例子)。

這裏的想法是,界面的使用者說:「我想要一隻動物餵食,我不在乎它是否飛行,走路或爬行,我不在乎它是大還是小。只關心它與所有其他動物共享某些功能「 - 這些功能將構成界面的定義。

換句話說,接口用於從具體的實現(類)抽象契約(接口)。這使得具體類的實現者可以自由地修改,重命名,刪除和添加實現,而不會爲接口的用戶破壞代碼,如果您直接在API中引用具體類,那麼這是不可能的。

至於僅由一個類實現的接口:沒有足夠的信息來決定。如果未來可能會有更多的接口實現,那麼它肯定是有意義的(例如:即使Sha1HashFunction當前唯一可用的實現,接口也是有意義的。否則它不提供任何東西。

+0

感謝您花時間回答這個問題,我知道這個問題似乎是散佈在所以但許多答案並不是那麼好。 – JasonDavis 2011-12-18 15:01:06

+0

@jasondavis:不幸的是,這是一個問題...並且謝謝。 – Jon 2011-12-18 15:05:41

+1

我想到插頭和插座。要使用插座,你必須知道如何設計你的插頭在插座上工作(例如三根插頭,但有很多種,包括適配器),但是一旦插頭離開牆壁,你會怎麼做?直到設備。從三個(或兩個爲我的跨池塘朋友)叉插頭出來的品種很多,但在它的根源,它仍然是一個三叉裝置。抽象類可以被看作是硬件連接到系統(聯網煙霧探測器)的東西,但在功能上也有些獨立。 – 2011-12-18 15:15:50