可能重複:
What is the point of interfaces in PHP?我爲什麼要在PHP中創建接口?
我爲什麼要創建PHP接口?
據我所知,接口在那裏描述實現它們的類。類必須至少包含這些函數。如果你正在構建別人的工作,或者必須保持一定程度的兼容性,這一切都很好。但是在更簡單的情況下?
我知道,對於編譯的編程語言,如C++,接口的使用可以提高編譯速度,但PHP呢?這個好處似乎消失了,因爲PHP被解釋,而不是編譯。
可能重複:
What is the point of interfaces in PHP?我爲什麼要在PHP中創建接口?
我爲什麼要創建PHP接口?
據我所知,接口在那裏描述實現它們的類。類必須至少包含這些函數。如果你正在構建別人的工作,或者必須保持一定程度的兼容性,這一切都很好。但是在更簡單的情況下?
我知道,對於編譯的編程語言,如C++,接口的使用可以提高編譯速度,但PHP呢?這個好處似乎消失了,因爲PHP被解釋,而不是編譯。
也許現實世界的例子將有助於說明這一點。想象一下,您需要構建一系列記錄類,將消息記錄到各種媒體,如文本文件,XML或數據庫。當然,每個類都需要有獨立的代碼來與不同類型的存儲進行交互。但是,如果他們都實現相同的接口,那麼他們向其他代碼顯示的「公共面孔」總是相同的。這樣,使用日誌對象的其他代碼就不需要知道它們是什麼類,它們是存儲介質的實例還是什麼。他們需要知道的一切就是所有的日誌記錄類,由於它們都實現了相同的接口,所以共享一個通用的API。這可能是一種非常強大的工作方式。您可以建立一個代碼庫,以不同的方式解決相關問題,只需在代碼中「即插即用」即可。
謝謝!這對我來說更加清晰。雖然其他答案包含很多額外的信息,但這讓我感到困惑。 – 2010-11-13 20:27:23
接口是一種「模擬」多重繼承的方式。 PHP中的類只能擴展一個父類,但可以實現任意數量的接口,從而允許創建具有多種不同類型的對象。
接口用於擴展/模擬核心PHP行爲,如迭代器,數組訪問等。這是接口給你的主要東西......也就是說,你不能以任何其他方式進行。
您還可以使用接口來執行參數檢查:
function foo(MyInterface $obj)
{
}
雖然作爲編譯時檢查,你會得到另一種語言而不是有用的(例如,C++),運行時檢查仍然很有助於最大限度地減少錯誤。
最後,通過使用is_a
函數或instanceof
運算符,接口可以簡化某些邏輯。你可以檢查「抽象」對象是否實現了某個接口,然後做相應的處理。
您的回答不正確。仿真/擴展核心PHP行爲?接口用於在子類中實施標準API。如果正確實施,您可以切換出不同的類,並且不會有任何不兼容性。 – 2010-11-13 23:06:42
要麼你是無知的,或只是迂腐。例如,如果您希望您的對象通過'[]'數組語法來模擬(擴展,模仿,作爲任何您喜歡的)數組,則必須實現ArrayAccess接口。沒有其他辦法可以做到這一點。還有許多其他內置接口提供了核心PHP功能。 – Matthew 2010-11-14 00:44:59
接口的使用與速度無關,永遠不會。 但它與解耦和抽象有很大關係。
您將在PHP中使用它們:
$object instanceof MyInterface
類汽車實現EngineInterface,BodyInterface,SteeringInterface {
使得Car
對象CA現在start()
,stop()
(EngineInterface)或goRight()
,goLeft()
(轉向接口)
和其他我現在無法想象的東西
來自Java中的思考:
一個接口說:「這就是所有實現這個特定接口的類都是這樣的。」因此,任何使用特定接口的代碼都知道可能爲該接口調用哪些方法,就這些。所以這個接口被用來在類之間建立一個「協議」。
我曾經這樣想過,但實際上PHP被編譯爲字節碼。當你執行腳本時,首先發生的事情是編譯。這就是爲什麼你可以使用像APC這樣的字節碼緩存。 – JAL 2010-11-13 19:27:49
接口用於代替多重繼承。在PHP中,他們也可以在對象上提供一些語法特徵,參見SPL類或ArrayAccces。 – mario 2010-11-13 19:30:35
[PHP中的接口是什麼?]的副本(http://stackoverflow.com/questions/20463/what-is-the-point-of-interfaces-in-php) – Gordon 2010-11-14 00:05:35