2

mysqliオブジェクトを作成したら、$ db_conn変数を処理するための最良の方法は何ですか?

私は使ってきました

$GLOBALS['_sql'] = new mysqli(...);

しかし、これは汚いようです。私が見た代替案は、接続変数をそれを呼び出すすべての関数に絶えず渡すことですが、それは大きな苦痛です。

4

4 に答える 4

5

私は通常呼び出すシングルトンクラスを使用しますDatabaseManager。と呼ばれる静的なパブリックメソッドを作成することgetDB()で、データベースがどこでも利用できるようになるため、データベースを渡すことを心配する必要がなくなります。簡単なスタブは次のとおりです。

class DatabaseManager
{
    private static $instance;
    private $db_connection;

    public initDBConnection($connectionInfo) {
          //make connection
    }

    public static function getInstance()
    {
        if (self::$instance == null) {
            $className = __CLASS__;
            self::$instance = new $className();
        }
        return self::$instance;
    }

    public static function getDB() 
    {
         return self::getInstance()->db_connection;
    }

}

データベース接続を初期化したら、を呼び出すだけDatabaseManager::getDB()でデータベース接続を取得できます。

このアプローチの利点は、複数のデータベースへの接続を管理するために簡単に拡張できることと、1つのデータベースに対して複数の接続を開かないようにすることです。接続を非常に効率的にします。

于 2009-12-14T03:45:48.500 に答える
1

私の見方では、それを渡すための3つのオプションがあります。

  • アレックスが提案したようなシングルトン。
  • $_GLOBALに保存します。
  • パラメータとして渡します。

個人的には、シングルトンで行きます。$ _GLOBALを使用するのは正しくないと感じ、パラメーターとして渡すのは面倒です。

于 2009-12-14T03:45:55.113 に答える
0

アプリに対してよりオブジェクト指向のアプローチを取ることを検討しましたか?PHPコードがクラスに編成されている場合は、データベース接続をインスタンスに1回渡すだけで(コンストラクターなど)、そのクラスのすべてのメソッドで簡単にアクセスできます$this->_sql

于 2009-12-14T03:38:43.930 に答える
0

のようなものはどうですか

class Db {

    public static function factory() {

         return new Db();
    }

    public function __construct() {

         // Set up DB connection here
    }

}

のような使用法

Db::factory()->query('DELETE FROM users WHERE active = 0');

もちろん、クエリメソッドをプログラムする必要があります。

于 2009-12-14T03:39:55.127 に答える