2011-03-16 11 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. A DBオブジェクトは、工場/ singelton/registeryにより取得し、それを周りに移動しないために通常より良いです。 1回のリクエストで何千ものオープンな接続を保持する能力を持たない限り、
  2. あなたは自動補完をしたい場合は - 私は個人的に、コンストラクタで引数として渡したい関数宣言

 

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

に型ヒントを置きます。 Itemのインスタンスが多数ある場合は、毎回新しい接続が作成され、データベースに負担がかかります。

0

アイテムを公開するたびにデータベースの新しいインスタンスを作成することは、DBの負荷となりますが、実際には良い設計の決定ではないことを指摘したいと思います。

ここでの主な問題は、デザインの精神の「原理」に従わないことです。 Itemに新しいDatabaseオブジェクトを作成させる場合は、データベースの作成方法やオープン方法などを変更する必要がある場合には、問題を解決する必要があります。新しいデータベースインスタンスを作成したコードベースのどこでも変更する必要があります。したがって、変更の準備ができていない。

関連する問題