gpt4 book ai didi

php - 在 PHP 中使用继承将数据从多个子类添加到数组

转载 作者:行者123 更新时间:2023-12-04 05:59:17 25 4
gpt4 key购买 nike

免责声明:这不是家庭作业。另外,我正在描述一个简化的情况,所以请忍受我的半伪代码。

我觉得这是一个非常标准的 OOP 情况,但我不确定处理它的最佳方法。假设我有 3 个类(class):Base , A , 和 B .类(class)A扩展 BaseB扩展 A . Base类的构造函数执行一个数据库查询,该查询提取数组中定义的各种元数据。见下文:

Class Base {

public $meta_data = array('col1','col2');

function __construct() {
$db->query("select ".join(',',$this->meta_data)." from table");
}

}

Class A extends Base {

public $meta_data = array('col3','col4');

function _construct() {
parent::__construct();
}

}

Class B extends A {

public $meta_data = array('col5','col6');

function _construct() {
parent::__construct();
}

}

当我创建一个 new B()对象,我希望 Base 构造函数的 sql 查询如下所示:
select col1, col2, col3, col4, col5, col6 from table;

当我创建一个 new Base()对象,我希望 sql 查询如下所示:
select col1, col2 from table;

现在......我在技术上知道如何完成这个(可能是一种粗略的方式),但我很好奇没有太多代码复制的正确方法是什么,并牢记 future 的灵活性(即,添加 B 的子类) .我基本上需要合并 $meta_data每个继承级别上的数组一直到 Base 中的构造函数类(class)。

有任何想法吗?

最佳答案

当您扩展类并定义新属性时,您将覆盖在父类中设置的值。我最终会移除 $meta_data除了 Base 之外的所有数组.然后在您的扩展类中创建一个类似于以下内容的函数:

在以一种非常简单的方式解决之后,我决定在 Base 中使用类似以下内容的方法。 :

protected function addToMetaData(array $meta_data) {
$this->meta_data = array_merge($this->meta_data, $meta_data);
}

然后在您的扩展类构造函数中,您只需传入要添加到 Base::$meta_data 的值的数组。 .

关于php - 在 PHP 中使用继承将数据从多个子类添加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123250/

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