2011-03-16 97 views
2

什麼是更好的做法?通過數據庫或打開數據庫?當我將數據庫傳遞給構造函數時,我無法執行自動完成(NetBeans PHP IDE)。將數據庫類傳遞給構造函數?

class Item { 
    private $name; 
    private $database; 

    public function __construct($database, $id) { 
     $information = $database->fetchSingleRow($id); 

     $this->database = $database; 
     $this->name = $information['name']; 
    } 
} 

我應該這樣做

class Item { 
    private $name; 
    private $database; 

    public function __construct($id) { 
     $this->database = new Database(); 
     $this->database->open(); 
     $this->database->select('test'); // selects test table 

     $information = $this->$database->fetchSingleRow($id); 
     $this->name = $information['name']; 
    } 

    public function __destruct() { 
     unset($this->item); 
     $this->database->close(); 
    } 
} 

回答

1

幾件事情:

  1. 一個數據庫對象通常是更好的工廠/ singelton /系統登錄得到,而不是移動它。除非您有能力在一個請求中保存數千個打開的連接。
  2. ,如果你想自動完成 - 把一個類型提示函數聲明

 

public function toto(DataBaseClass $MyDB,array $params){...} 
1

我個人把它作爲在構造函數中的參數。如果Item中有許多實例,則每次都會創建一個新連接,這會使數據庫變得緊張。

0

它已經被覆蓋了,每次你創建一個項目會創建一個新的數據庫實例將成爲數據庫的壓力,但我也想指出,它真的不會是一個好的設計決定。

這裏的主要問題是,你沒有遵循設計規劃的「原則」。如果你想讓Item創建一個新的數據庫對象,那麼如果你想改變任何有關數據庫是如何創建/打開/等等的話,你會遇到問題。您必須更改您的代碼庫中創建新數據庫實例的任何位置。因此沒有準備好改變。