2012-04-11 10 views
1

シングルトンパターンを使用してdb utilクラスを作成しようとしています。私の問題は、 "接続"オブジェクトが常にnullであることです。接続設定が正しい。私は何が間違っていますか?また、私は比較的新しいphp開発です。何が間違っているか把握するためにどのような方法を使用すべきですか?コードが続きます。mysqliコンストラクタがnullを返す

class DBUtil { 
     public $connection = NULL; //mysqli_connection object 
     private static $instance = NULL; 

     private function _constructor($conn){ 
      //$this->connection = mysqli_connect(TagMetroConfiguration::getConfigurationValueFor("db_servser_name"), TagMetroConfiguration::getConfigurationValueFor("db_username"), TagMetroConfiguration::getConfigurationValueFor("db_password"), TagMetroConfiguration::getConfigurationValueFor("db_name")); 
      $this->connection = new mysqli("localhost", "root", "toor", "testdb"); 
     } 

     public static function getInstance(){ 
      if(DBUtil::$instance == NULL){ 
       try{ 
        DBUtil::$instance = new DBUtil(); 
       }catch(Exception $ex){ 
        throw new Exception("Unable to create DB Instance"); 
       } 
      } 

      return DBUtil::$instance; 
     } 
} 
+0

実際、シングルトンのパターンはあまりに複雑すぎますが、それはまったく問題ではありません。シングルトンは使用しないでください。あなたはPHPでそれらを必要としません。あなたのケースでは、データベース接続のグローバル変数だけが必要です。 - しかし、あなたがコピー&ペーストのように感じるなら、[PHPマニュアルにはシングルトンパターンのコード例があります](http://php.net/manual/en/language.oop5.patterns.php#language.oop5.patterns。シングルトン)(これは何かを良くするものではなく、それを使用しないでください)。 [誰がシングルトンを必要としますか?](http://stackoverflow.com/q/4595964/367456) – hakre

答えて

3

コンストラクタ関数の名前は、__construct(アンダースコアは2つ)にする必要があります。

また、コンストラクタには、1つのパラメータ$connがあります。 new DBUtil()に電話すると、その入力パラメータが提供されていないので、おそらくカスタムパラメータではなくデフォルトのコンストラクタが呼び出されます。

入力パラメータ$connをオプションにする場合は、__construct($conn = null)を試してください。

new DBUtil(null)としてみてください。

2
private function _constructor($conn) ?? 

これは、あなたがこのようにすればいい

private function __construct($conn) 
+0

オブジェクトをインスタンス化するときに$ conn変数を渡さないので、デフォルト値をnullに設定することもできます。プライベート関数__construct($ conn = null) –

-1

次のようになります。

class DBUtil { 

     private static $instance; 

     private function _construct(){ 
      $this->$instance = new mysqli("localhost", "root", "toor", "testdb"); 
     } 

     public static function getInstance(){ 
      if(!isset(self::$instance){ 
       try{ 
        self::$instance = new DBUtil(); 
       }catch(Exception $ex){ 
        throw new Exception("Unable to create DB Instance"); 
       } 
      } 

      return self::$instance; 
     } 
2

2つの下線____construct)があるはずです。