2012-06-13 81 views
2

我想要實現繼承,因爲我跟着this article我沒有得到數據庫設計,我只能創建如下的模型,我在Model/Behavior下創建了文件InheritBehavior.php,如文章。因此,如何設計數據庫,這些模型支持繼承如何在CakePHP中實現繼承

class Animal extends AppModel{ 
    var $name='Animal'; 
} 

App::import('Model', 'Animal'); 
class Mammal extends Animal{ 
public $actsAs = array('Inherit'); 
} var $name= 'Mammal'; 

} 


App::import('Model', 'Animal'); 
class Insect extends Animal{ 
    var $name='Insect'; 
} 

Animal: id, age 
Mammal: id, no_of_legs ('age' is common) 
Insect: id, no_of_wings ('age' is common) 

,這是什麼數據庫設計(多表繼承)。

對於這種類型,使用繼承而不是關聯(使用hasOne和belongsTo)是否是一個好主意,這是否會被cakephp很好的支持?

回答

5

排序回答:不,這不是一個好主意。

在OOP中,建議始終比繼承偏好組合。


你做錯了。

在OOP中有一些我們稱之爲Liskov substitution principle啞向下版本:image)。這意味着,在進行子分類時,不應刪除或根本改變功能。

此外,使用動物作爲面向對象的例子總是非常可怕。分類如下:鯨魚(沒有腿),蝙蝠(有翅膀),蝨子(沒有翅膀)。我想你會看到問題。

還有一件事。作爲CakePHP用戶,您可能不知道它,但在PHP5中,我們已將變量定義爲private,publicprotected。而不是PHP4風格var

+1

+1對於啞版的圖像:D – Deadlock