我想实现继承,因为我跟着this article我没有得到数据库设计,我只能按如下方式创建模型,我在模型/行为下创建了文件InheritBehavior.php,如文章中所述。那么如何为这些模型设计数据库以支持继承
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是否会很好地支持它?
答案 0 :(得分:5)
排序答案:不,这不是一个好主意。
在OOP中,建议始终优先选择合成而不是继承。
你做错了。
在OOP中我们称之为Liskov substitution principle(对于 dumb down 版本:image)。这意味着,在进行子类化时,不应删除或从根本上改变功能。
此外,使用动物作为OOP示例总是非常可怕。分类如下:鲸鱼(没有腿),蝙蝠(有翅膀),虱子(没有翅膀)。我想你看到了问题。
还有一件事。作为CakePHP用户,您可能不了解它,但在PHP5中,我们将变量定义为private
,public
或protected
。而不是PHP4风格的var
。