PHP中的接口是否具有屬性,還是隻有方法?PHP接口有屬性嗎?
回答
這取決於你所說的「屬性」。如果你的意思是實際的領域,那麼不,他們不。如果你指的是像C#那樣的屬性,那麼他們可以(因爲無論如何,屬性訪問器完全是訪問器方法的語法糖)。這同樣適用於事件(當然,在每種情況下,沒有爲get
/set
或add
/remove
訪問器指定實現)。
更新:由於PHP不具有在get
/set
存取意識屬性,然後回答你的問題是沒有。接口不能攜帶自己的數據/狀態。
常數被認爲是某些圈子中的數據。 ymmv – 2013-01-23 09:28:04
@ nickl-這些圈子很瘋狂,因爲狀態發生了變化,常量沒有。 – mpen 2016-06-09 19:38:44
PHP接口可以有常量,但不包含屬性(實例變量)。如果你不需要修改你的「屬性」,你可以使用常量。
PHP中的接口可能只包含公共方法簽名沒有方法體。它們也可能包含常量。但就是這樣。沒有其他的。
http://www.php.net/manual/en/language.oop5.interfaces.php參見
接口所使用的接口關鍵字定義,以同樣的方式作爲標準類,但沒有任何的方法具有限定其內容。 [...]在接口中聲明的所有方法都必須是公共的,這是接口的本質。 [...]接口可能有常量。接口常量的工作方式與類常量完全相同,除非它們不能被繼承它的類/接口覆蓋。
在接口中需要屬性的[有效]原因是指定DTO類具有某個方面,例如, IOrderable {OrderDate,OrderStatus},IDeliverable {DeliveryAddress,Route,...}等。該方面可以用於許多DTO中,例如銷售訂單,工作訂單,銷售發票等.DTO類可以支持多個方面,即數據類(而不是代碼類)中需要的多重繼承。此後,DTO的客戶確信它可以通過該方面(接口合同)查看DTO。這種模式遵守所有5個固體原則。
在PHP中,您最接近的屬性是特徵http://php.net/manual/en/language.oop5.traits.php。與接口類似,特徵不能被實例化,但是可以直接在類中使用而不實現它們。
一個特徵決不會與接口「屬性」類似 - 也不是與接口非常相似。這只是錯誤的 – 2017-12-23 09:15:49
接口是一個類的方法的藍圖,一個特性是一組方法/屬性,可以在不使用繼承或依賴注入的情況下在類之間輕鬆共享。 – 2017-12-23 09:30:48
@A_funs編輯我的答案以澄清這一點 – Michael 2017-12-25 20:38:38
- 1. DBus接口屬性
- 2. 屬性和接口
- 3. 在接口中實現接口屬性?
- 4. 接口擴展接口屬性
- 5. 接口不應該有屬性?
- 6. 接口上的屬性
- 7. 接口,屬性和反射
- 8. groovy接口方法屬性
- 9. 接口特定屬性
- 10. Typscript實現接口屬性
- 11. 接口和屬性顯示
- 12. 接口上的c#屬性
- 13. 接口上的屬性
- 14. 點網有一個類似IEnumerable的接口,它具有Count屬性嗎?
- 15. 接口中的屬性不是數據嗎?
- 16. ID屬性有括號嗎?
- 17. WinRT中有'IsInDesignMode'屬性嗎?
- 18. 反映一個接口的所有屬性,包括繼承的屬性?
- 19. 綁定到接口並顯示基接口中的屬性
- 20. 過濾器IENumerable接口的類屬性接口外
- 21. 使用來自接口的繼承屬性的屬性
- 22. 動態屬性分配傳遞接口屬性
- 23. 屬性實現必須在接口
- 24. 顯式接口的依賴屬性
- 25. 的接口屬性@Inject標註在JUnit
- 26. 實現的接口屬性返回null?
- 27. 接口類型的動作屬性
- 28. c#中的接口屬性副本#
- 29. 屬性,接口或抽象類
- 30. Python Dbus:如何導出接口屬性
*(reference)* http://www.php.net/manual/en/language.oop5.interfaces.php – Gordon 2010-05-03 09:00:48
問題是一個合理的問題,人們可以將一個類的公共屬性想象爲這些類的公共接口的一部分,並且可能希望強制實現接口的類來使某個命名屬性可用。 但是你不能 - 所以你只需要在界面中使用getProperty()setProperty()方法 - 這不是一件壞事,因爲每個人都知道公共屬性是邪惡的(我們都知道我們不是嗎? ?不是嗎?) – 2013-06-01 09:10:29