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. 我可以重寫接口屬性嗎?
- 2. 具有接口屬性的JPA實體,有可能嗎?
- 3. 的接口屬性
- 4. 屬性和接口
- 5. DBus接口屬性
- 6. 可以派生的C#接口屬性覆蓋具有相同名稱的基礎接口屬性嗎?
- 7. 在接口中實現接口屬性?
- 8. 接口擴展接口屬性
- 9. 接口中的屬性屬性
- 10. 帶有屬性功能的TypeScript接口
- 11. 接口不應該有屬性?
- 12. 注入具有接口屬性和設計原則的接口
- 13. 接口上的屬性
- 14. 接口上的屬性
- 15. Typscript實現接口屬性
- 16. C#接口屬性實現
- 17. 接口,屬性和反射
- 18. 接口特定屬性
- 19. groovy接口方法屬性
- 20. 接口和屬性顯示
- 21. 接口上的c#屬性
- 22. 點網有一個類似IEnumerable的接口,它具有Count屬性嗎?
- 23. 如何共享具有相同屬性的兩個接口的所有屬性
- 24. 在Python接口中定義屬性是一個好主意嗎?
- 25. 接口中的屬性不是數據嗎?
- 26. PrimitiveType可以有屬性嗎?
- 27. ID屬性有括號嗎?
- 28. WinRT中有'IsInDesignMode'屬性嗎?
- 29. 有沒有辦法「提取」TypeScript接口屬性的類型?
- 30. 反映一個接口的所有屬性,包括繼承的屬性?
*(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