mysqliオブジェクトを作成したら、$ db_conn変数を処理するための最良の方法は何ですか?
私は使ってきました
$GLOBALS['_sql'] = new mysqli(...);
しかし、これは汚いようです。私が見た代替案は、接続変数をそれを呼び出すすべての関数に絶えず渡すことですが、それは大きな苦痛です。
私は通常呼び出すシングルトンクラスを使用します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つのデータベースに対して複数の接続を開かないようにすることです。接続を非常に効率的にします。
私の見方では、それを渡すための3つのオプションがあります。
個人的には、シングルトンで行きます。$ _GLOBALを使用するのは正しくないと感じ、パラメーターとして渡すのは面倒です。
アプリに対してよりオブジェクト指向のアプローチを取ることを検討しましたか?PHPコードがクラスに編成されている場合は、データベース接続をインスタンスに1回渡すだけで(コンストラクターなど)、そのクラスのすべてのメソッドで簡単にアクセスできます$this->_sql
。
のようなものはどうですか
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');
もちろん、クエリメソッドをプログラムする必要があります。