2012-03-09 11 views
0

同じリクエスト中にデータベースに接続する必要のあるクラスがあります。私が考えた解決策は、PDOオブジェクトをメソッドの引数として与えることでした。 public属性への接続や店舗を作成し、DB()クラスがあります:引数として指定された変数オブジェクトを使用する

class DB{ 
    public $conn; 
    public function DB(){ 
     $this->conn = new PDO(...);//missed :S thxs! 
    } 
} 

class Foo{ 
    public function Foo($db[, $more_possible_variables]){ 
     //implementing some stuff with $db 
    } 
} 

/*index.php*/ 
require_once 'DB.php'; 
require_once 'Foo.php'; 

$db = new DB(); 
$foo = new Foo($db->conn); 
/*End of index*/ 

私はこの仕事をするためにいくつかのアイデアを試してみましたが、私は常に可能ではないエラーのような変数を処理するために取得しますオブジェクト。他のソリューションもありますが、効率的な観点からは推奨されません。

+0

$ this-> connが足りないことを確認してください。これを使わないでローカル変数にPDOオブジェクトを割り当てています。 – Nathan

+0

私は自分のコードに同じ誤りがあることを知りました! – matt

答えて

0

最初に、オブジェクト参照$ thisがないことを確認してください。そうでない場合は、PDOオブジェクトをメンバー変数の代わりにローカル変数。

シングルトンのようなデザインパターンを使用することを検討してください。この場合、PDOオブジェクトのインスタンスが1つしか作成されないことが保証されます。

PHP documentationにこれのサンプル実装があります。

これはあなたが達成しようとしているものの簡易版のようになります。デザインパターンの詳細については、それらが使用されているどのように問題にwikipedia articleに向かうことにしたい、または読み取り可能

class DB { 
    private static $_Instance = null; 
    protected $_PDOInstance = null; 

    private function __construct() { 
     // Create the PDO Object 
     $this->_PDOInstance = new PDO(...); 
    } 

    public static function getInstance() { 
     if(self::$_Instance !== null) { 
      return self::$_Instance; 
     } 

     $className = __CLASS__; 
     self::$_Instance = new $className; 

     return self::$_Instance; 
    } 
} 

GoFのような素晴らしい本 - デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素。

関連する問題