2012-05-20 19 views
0

$ object = new myClass($ name);如何處理創建全新的對象並從數據庫中檢索對象? PHP/MySQL OOP

如果我使用「new」在應用程序中創建一個新對象以保存到數據庫,那麼我使用什麼方法從數據庫中檢索現有對象?

是否有一個標準的程序來處理真正的新對象與從數據庫中獲取現有的對象?

編輯:

難道是一個壞主意,有改變基於參數構造函數?

__construct($param) { 
    if(is_numeric($param)) { 
    // get existing data from DB 
    } else { 
    // set name for new object 
    $this->name = $param; 
    } 
} 

回答

1

通常你會想要一個集合類實例化的新對象。

因爲每個記錄的一個db查詢是浪費的。

所以你將有一個模擬db記錄的類和一個模擬記錄列表的類。

class collection { 
    protected $filters = array('ids' => array(), 'published' => true, 'name' => ''); 
    protected $records = array(); 
    public function __construct($filters) { 
     // validate $filters content here 
     $this->filters = array_merge($this->filters, $filters); 
     $query = $this->generateQueryUsing($this->filters); 
     $pdos = $pdo->query($query); 

     foreach($pdos->fetch(PDO::FETCH_CLASS, 'Record', array(NULL, FALSE)) AS $item) 
      $this->records[] = $item; 

     foreach($pdos->fetch() AS $item) 
      $this->records[] = new Record($item, FALSE); // Record::__construct($data, $is_new = TRUE) 


    } 
} 
+0

因此,您是說使用「new」關鍵字應該用於單獨創建的新記錄,並且Collection類應該用於檢索現有記錄集? –

+0

基本上是的,但請記住,新的PHP與存儲在內存中的對象有關,並且即使您在集合類中創建對象,也會調用其構造函數...因此,如果新建===插入,您會得到重複項。 –

+0

目前我使用新的,然後一個單獨的成員函數save()。爲了獲得現有數據,我使用了一個靜態方法getBy($ method,$ value),它返回$ this對象的數組。我只是不知道我是完全怪異還是常態。 –