2013-12-09 167 views
0

我有一個關於如何填充數據庫中的對象的問題,它更多的是關於體系結構而不是自我填充。從數據庫中填充對象POO

比方說,我有一個名爲收據的表,它具有:receipt_id,user_id,issue_date,business_id,product_id abd類型。

現在我想創建將從該表填充收據類,我會做這樣的事情:

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的方法,它將返回一個調用此靜態方法的收據對象數組。我認爲它應該是靜態的,因爲創建一個空的收據來生成用戶的收據沒有任何意義。這個架構中是否存在任何缺陷或更好的竅門?

+0

我說對靜態。 –

回答

0

是的,它應該是靜態的。正如您自己已經提到的那樣,您不需要收據對象就可以檢索其他收據。

PHP documentation

聲明類屬性或方法爲靜態,使他們無需類的實例訪問。

順便說一下,你在這裏做什麼叫做Active Record pattern。如果你打算使用這種方法,創建一個定義共享方法(如save,find等)的基類(你可以稱之爲Record或類似的東西)並讓你的模型擴展它們(class Receipt extends Record,class User extends Record等)。這樣,您不需要在所有模型中重複此代碼。

該方法的一個很好的(PHP)示例由PHP ActiveRecord project給出。查看他們的文檔應該會給你一些關於它是如何工作的想法。

另一種方法是Data Mapper pattern。好處是您的模型不知道如何保存它們,所以您在如何保存數據方面擁有很大的靈活性,而不是受限於ActiveRecord。