在没有多重继承的情况下,在这个PHP类结构中使用什么是合适的设计模式?

ryb*_*ome 5 php oop design-patterns

我有一个名为的抽象类Node.它包含一个构造函数,它从我的数据库中获取一行,并实例化基本信息.在我的网站内容全部件扩展此类- ,Person,Event,Project等.

其中3个扩展类是特殊的 - 构建它们时,除了从数据库中提取值之外,还需要查询Web服务; 如果Web服务提供的值与DB中给出的值不同,则需要保存到DB.

在具有多重继承能力的语言中,这将非常简单; 这些类中的任何一个将扩大双方Node,和APIData,或类似的东西.没有MI,我不知道如何处理这个问题.使用接口没有帮助,因为它没有提供具体的实现.

装饰模式有时被推荐为MI的某些特征的替代,但我没有足够的经验来确定这是否是合适的选择.有什么建议?

Sas*_*ley 1

由于该类APIData将从您的类中获取功能Node,因此您应该简单地扩展它。这是一些伪代码:

abstract class APIData extends Node {

    public function __construct($data) {
        parent::__construct($data);
        $this->checkData();
    }

    protected function checkData() {
        // load data from webservice
        $data = $this->loadData();

        // check if data is the same
        foreach($data as $item => $value) {
            if ($this->data[$item] != $value) {
                // save in database
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)