从数据库POO填充对象

时间:2013-12-09 14:58:24

标签: php database static

我有一个关于如何从数据库填充对象的问题,它更多的是关于体系结构而不是自己填充它。

假设我有一个名为收据的表格,其中包含:receipt_id,user_id,issue_date,business_id,product_id abd type。

现在我想创建一个将从该表填充的Receipt类,我会这样做:

class Receipt {


public function __construct($receipt_id = null) {
    if(!is_null($receipt_id))
        $this->populate($receipt_id);
}

public function populate($receipt_id){
    //Get data from data base
}

public function save(){
    //Saves the current receipt into the data base.
}

public static function getReceiptsFromUser($user_id){

}

}

我的问题是关于getReceiptsFromUser,它应该是静态的吗?对于User类来说,有一个名为getReceipts的方法是有意义的,它会返回一个调用这个静态方法的收据对象数组。我认为它应该是静态的,因为创建空收据以生成用户的收据没有任何意义。这个架构中存在任何缺陷或更好的方法吗?

1 个答案:

答案 0 :(得分:0)

是的,它应该是静态的。正如您自己已经提到的那样,您不需要Receipt对象来检索其他收据。

来自PHP documentation

  

将类属性或方法声明为静态使它们可以访问,而无需实例化类。

顺便说一句,你在这里做的是Active Record pattern。如果您打算使用这种方法,最好创建一个定义共享方法的基类(可以称之为Record或类似的东西)(例如save,{{1等等,让你的模型扩展它们(findclass Receipt extends Record等)。这样,您无需在所有模型中重复此代码。

这种方法的一个很好的(PHP)示例由PHP ActiveRecord project给出。查看他们的文档应该会给你一些关于它如何工作的想法。

另一种方法是Data Mapper pattern。好处是您的模型不知道如何保存它们,因此您可以非常灵活地保留数据的持久性,而不是受限于ActiveRecord的限制。