gpt4 book ai didi

PHP对象加载模式

转载 作者:行者123 更新时间:2023-11-29 23:51:13 25 4
gpt4 key购买 nike

抱歉,这个标题实在太糟糕了。

我有一个对象类和一个用于获取所有对象的objectManager 类。 (这是一个例子)。

我可以使用 new Object($id); 创建一个对象

如果存在 id 参数,则该对象将进行 SQL 查询并用数据填充自身。

我想制作一个包含所有对象的表格,显示它们的值。

我应该使用 objectManager 类进行一个大型 SQL 查询来返回我需要的所有内容,还是只获取 id 列表,然后在循环中单独加载每个对象?

我认为只进行一个查询更好,但是使用第二种解决方案代码确实更容易阅读。

你最喜欢的方法是什么?

谢谢

最佳答案

您应该只有一个查询,然后对象应该与相关数据混合,而无需传递 ID。您可以实现 Hydrate 或 ExchangeArray 方法:

示例:

public function exchangeArray(array $data){
$this->property1=$data['property1'];
$this->property2=$data['property2'];
$this->property3=$data['property3'];
return $this;
}

编辑

您还可以在对象构造函数中处理它:

public function __construct($argument){

if(is_numeric($argument)){
//treat as ID
return $this->findById($argument);
}elseif(is_array($argument)){
//hydrate object without call to DB
return $this->exchangeArray($argument);
}
}

您可能想查看 Doctrine 项目,它提供了现成的对象关系映射器层:

http://www.doctrine-project.org/projects/orm.html

另请参阅存储库模式:

http://martinfowler.com/eaaCatalog/repository.html

关于PHP对象加载模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25644267/

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