gpt4 book ai didi

php - 如何在 Cakephp 中实现继承

转载 作者:行者123 更新时间:2023-12-02 05:40:39 25 4
gpt4 key购买 nike

我想实现继承,因为我遵循了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 中,我们将变量定义为 privatepublicprotected。而不是 PHP4 风格的 var

关于php - 如何在 Cakephp 中实现继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com