Php对象加载模式

时间:2014-09-03 12:24:38

标签: php mysql oop

对不起这个非常糟糕的头衔。

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

我可以用new Object($id);

创建一个对象

如果存在id参数,则对象进行sql查询并使用数据填充自己。

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

我应该使用objectManager类来创建一个大的SQL查询,它将返回我需要的所有内容,或者juste获取一个id列表,然后在循环中单独加载每个对象?

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

你最喜欢的方法是什么?

谢谢

1 个答案:

答案 0 :(得分:0)

您应该只有一个查询,然后使用相关数据对对象进行水合,而不必传递ID。您可以实现Hydrate或exchangeArray方法:

示例:

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

修改

您也可以在Object构造函数中处理它:

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

另见Repository模式:

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