如何在Cakephp中实现继承

时间:2012-06-13 07:25:46

标签: php oop cakephp inheritance cakephp-2.1

我想实现继承,因为我跟着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是否会很好地支持它?

1 个答案:

答案 0 :(得分:5)

排序答案:不,这不是一个好主意。

在OOP中,建议始终优先选择合成而不是继承。


你做错了。

在OOP中我们称之为Liskov substitution principle(对于 dumb down 版本:image)。这意味着,在进行子类化时,不应删除或从根本上改变功能。

此外,使用动物作为OOP示例总是非常可怕。分类如下:鲸鱼(没有腿),蝙蝠(有翅膀),虱子(没有翅膀)。我想你看到了问题。

还有一件事。作为CakePHP用户,您可能不了解它,但在PHP5中,我们将变量定义为privatepublicprotected。而不是PHP4风格的var