私は2つのdbを持っており、私は実際にシングルトンパターンである私のDbクラスからそれらの1つを返したいと思います。だから、毎回新しい接続をしたくないのですが、接続が配列内に存在するかどうかを確認してから、それを返すようにします。問題は、getInstanceメソッドから戻ってくるのは、同じDbオブジェクトでPDOオブジェクトではないということだけです。シングルトンパターンは複数のdbで動作しません
class Db
{
public static $dbTypes = [];
/**
* Db constructor.
* @param $db
*/
private function __construct($db)
{
switch ($db) {
case ConfigManager::getDbDatabase(true):
try {
self::$dbTypes[$db] = new \PDO("mysql:host=" . ConfigManager::getDbHost(true) . ";dbname=" . ConfigManager::getDbDatabase(true) . ";charset=utf8", ConfigManager::getDbUser(true), ConfigManager::getDbPass(true));
} catch (\PDOException $ex) {
echo $ex->getMessage();
}
break;
case ConfigManager::getDbDatabase(false):
try {
self::$dbTypes[$db] = new \PDO("mysql:host=" . ConfigManager::getDbHost(false) . ";dbname=" . ConfigManager::getDbDatabase(false) . ";charset=utf8", ConfigManager::getDbUser(false), ConfigManager::getDbPass(false));
} catch (\PDOException $ex) {
echo $ex->getMessage();
}
break;
}
}
/**
* @throws \Exception
*/
private function __clone()
{
throw new \SoapFault('CODE_ERROR', 'You can not clone ' . __CLASS__ . ' class.');
}
/**
* @param $db
* @return \PDO
*/
public static function getInstance($db) : \PDO
{
if (!array_key_exists($db, self::$dbTypes)) {
self::$dbTypes[$db] = new self($db);
}
return self::$dbTypes[$db];
}
}
CONFIGMANAGERクラスがあなたを混同してはいけない、設定ファイルから値を取得するだけでゲッタークラスです。基本的に、ConfigManagerメソッドのparamがtrueの場合は最初のdbが返され、falseの場合は2番目のdbの値が返されます。そして、私はこのようなPDOを使用したい:
$this->db = Db::getInstance(ConfigManager::getDbDatabase(true));
$query = $this->db->prepare("SELECT c.extern_username...
私は「::未定義のメソッドヘルパー\ ConfigHelpers \ DBへの呼び出し()の準備」エラーを取得しています。お知らせ下さい。
ようにそれを使用するには、あなたはvar_dumpingます$ this->デシベルを試みたことがありますか? PDOインスタンスではない可能性があります。また、ConfigManager :: getDbDatabase(true)は何を返しますか? – Andreas
私はphp stormでデバッグします。$ this-> dbは無限の配列で、paramがtrueの場合はConfigManager :: getDbDatabase(true)は最初のdb名を返し、paramがfalseの場合は2番目のdb nameを返します。他のすべてのConfigManagerメソッドは同じ方法で動作します。 – belijja
そして、私が 'error_log(" Dbの戻り値 "var_export($ this-> db、true));'を得ると、ヘルパー\\ ConfigHelpers \\ Db :: __ set_state(配列(\ n))**ログファイルに保存します。 – belijja