Q
多層次繼承
1
A
回答
1
我最初的想法是,這可能不是很好的繼承,但測試後似乎沒有問題。但是,還有其他方法可以實現這一點,您可能會意識到這一點。
抽象類或接口可能是有意義的。
抽象類就像其他類一樣,但它們不能被實例化。也有抽象的方法必須由具體的類來實現。
abstract class A {
//You can also have abstract methods
abstract public function doFoo();
abstract public function doBar($when);
//Also implemented method which when
//called unless overridden will use this logic
public function sayHi(){
echo "hi";
}
}
現在,這個類可以選擇實現抽象方法,也可以不添加任何進一步需要的邏輯。
abstract class B extends A {
public function doFoo(){
//Some code
}
abstract public function doFooBar();
public function sayBye(){
echo "bye";
}
}
這是一個具體的類和所有的抽象方法必須在這裏實現,如果不是已經被執行者可以再次覆蓋。
class C extends B {
public function doFoo(){
//Some different code
}
public function doBar($when){
//Some code
}
public function doFooBar(){
//Some code
}
//do not need sayHi() and sayBye() but they will be available.
}
接口在一個簡單而粗糙的方式是一袋方法。你只是告訴開發人員你是否要使用這些實現這些。這些方法沒有被聲明爲抽象的,但不能在接口中實現。
interface iA {
public function doFoo();
public function doBar();
}
一個接口可以由其它接口,其只是加入更多的方法來接口
interface iB extends iA {
public function doFooBar();
}
interface iC {
public function doAnything();
}
而且
class A implements iA{
public function doFoo(){
//Some Code
}
public function doBar(){
//Some Code
}
}
class B implements iB{
public function doFoo(){
//Some Code
}
public function doBar(){
//Some Code
}
public function doFooBar(){
//Some Code
}
}
增加的優點的接口由類實現的擴展是一個類或摘要可以實現多於一個
abstract class C implements iA, iC {
public function doFoo(){
//Some Code
}
}
class D extends C {
//get doFoo() from C implementation and must implement the remaining...
public function doBar(){
//Some Code
}
public function doAnything(){
//Some Code
}
}
0
這似乎完全正常。 PHP只支持單繼承 - 所以你只能從一個類繼承。 如果您需要班級中的更多功能,但無法獲得父級班級的功能,您還可以考慮使用traits。性狀嘗試解決單遺傳問題 - 即使它本身不是問題。
如果你正確地構建你的類,你會得到一個很好的繼承鏈,這對Apache/Nginx沒有任何不良影響。
相關問題
- 1. Doctrine2多層次繼承
- 2. 多重繼承層次
- 3. 層次繼承
- 4. C++繼承層次結構
- 5. 多個抽象類的多層次繼承
- 6. 爲什麼多層次,多繼承在asp.net
- 7. 分層繼承
- 8. Hibernate進行多層次的混合繼承策略層次結構
- 9. 並行繼承層次結構重構
- 10. 爲什麼System.Decimal繼承層次
- 11. 映射JPA實體繼承層次
- 12. Spring MVC的 - 對於繼承層次
- 13. C#繼承 - >的類層次結構
- 14. UrlClassLoader委託和繼承層次結構
- 15. 模板類層次的朋友繼承
- 16. 表每層次和繼承關係
- 17. 類表繼承與層次結構
- 18. C++中繼承的類層次
- 19. C#類Quadrilateral的繼承層次結構?
- 20. 調用不同類的繼承層次
- 21. PostSharp和方面繼承通過層次
- 22. 從SQLAlchemy子類繼承層次結構
- 23. Dagger 2:依賴繼承層次
- 24. Neo4j javadocs繼承層次結構
- 25. 類繼承層次的設計問題
- 26. 繼承中的循環層次結構
- 27. 可以解析繼承處理繼承的多個圖層嗎?
- 28. C#,EF,多層次的繼承,數據將不會加載
- 29. 的has_many多層次結構和單表繼承
- 30. Rails的STI,多層次的繼承查詢
對我來說似乎很好,但這個例子非常狹窄。 –
我可能不會擔心性能的影響,除非你進入更深的嵌套(閱讀:不現實的)繼承,或者你的類的內容非常密集。如果您的應用程序的設計需要(即)20個級別的繼承,那就這樣吧。根據您的需求,它最終可能是可維護性/可讀性和性能之間的折衷。 –
誰說這是一個不好的做法? (你能鏈接一些來源嗎?) –