Singleton für DB Connection

Arndtinho

Erfahrenes Mitglied
Hallo,

ich möchte mir eine Singleton-Klasse für den Connect zur Db erstellen. Diese soll nur die Connection erstellen (für die Queries gibt es eine eigene Klasse). Die Login-Daten kommen aus einer Config-Datei. Wie muss ich nun die die Daten an die Klasse übergeben? Nach altem Weg habe ich die Parameter an den Constructor übergeben. Da dieser ja nun "private" ist, funktioniert dieser Weg nicht mehr. Spontan würde ich der Methode "getInstance()" alles mitgeben.
PHP:
$oCon = Db::getInstance('Host', 'User', 'Pass', 'Db', 'Type');
Liege ich da richtig?

Viele Grüße
Arndtinho
 
Ich würde spontan sagen, dass du richtig liegst. Du musst dann aber trotzdem dem Constructor die Parameter mitgeben, da dieser ja in der Klasse selbst aufgerufen wird und die Werte dann ggf. gespeichert werden sollen.
 
Wenn du mehrere unterschiedliche Verbindungen speichern willst, musst du diese mit dem jeweiligen Merkmal ausstatten. Beispielsweise:
PHP:
class Db
{
	private static $instances = array();

	public static function getInstance( $host, $user, $pass, $db, $type )
	{
		$id = implode(':', array($host, $user, $pass, $db, $type));
		if( !isset(self::$instances[$id]) ) {
			self::$instances[$id] = new Db();
		}
		return self::$instances[$id];
	}
}
 
Meinst Du mehrere Verbindungen innerhalb einer Anwendung?
Meine Idee war, anhand des Parameters 'type' eine entsprechende Verbinung aufzubauen - also entweder MySQL oder MSSQL oder ein anderes DB-System. Default sollte MySQL sein. Es kann immer nur ein DB-System geben.
Oder ist dieser Ansatz falsch gedacht?

Viele Grüße
Arndtinho
 
Danke für die Tipps.
Habe erst jetzt wieder an der Klasse arbeiten können. Für MySQL funktioniert sie.

Viele Grüße
Arndtinho
 
Zurück