作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现继承,因为我遵循了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 会很好地支持它吗?
最佳答案
排序答案:不,这不是一个好主意。
在 OOP 中,建议始终优先使用组合而不是继承。
你做错了。
在 OOP 中有一个我们称之为 Liskov substitution principle 的东西(对于 dumb down 版本:image)。这意味着,在子类化时,您不应该删除或从根本上更改功能。
此外,使用动物作为 OOP 示例总是以可怕的方式结束。分类如下:鲸鱼(没有腿)、 bat (有翅膀)、虱子(没有翅膀)。我猜你看到了问题。
还有一件事。作为 CakePHP 用户,您可能没有意识到这一点,但在 PHP5 中,我们将变量定义为 private
、public
或 protected
。而不是 PHP4 风格的 var
。
关于php - 如何在 Cakephp 中实现继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010046/
我是一名优秀的程序员,十分优秀!