Zitat von
xtra
Constructor ist private
Hast Recht, das hab ich übersehen (Konstruktoren sind bei mir immer public [oder per Namespace abgetrennt, so dass die anderen Klassen die Klasse gar nciht erst sehen] )
Zitat von
xtra
Constructor ist private
$objInstance im falschen Scope (in der Basisklasse und nicht in der von dir abgeleiteten) etc. ppp.[/QUOTE]
Wofür brauchst du das? Wenn du getInstance nicht benutzt ist dir der Inhalt von dieser Variablen egal und $objInstance wird nur für das Singleton gebraucht, ansonsten nicht (soweit ich das eben sehe)
Zitat von
xtra
Man muss quasi die komplette DB Klasse kopieren, hab ich auch schon mal gemacht um ein Drittsystem anzubinden.
Vererben und einfach eine weitere public static Methode einfügen, die den Konstruktor umgeht. Ich habe mal (ungetestet etwas skizziert):
PHP-Code:
class MyDB extends Database{
public static function connectTo($host, $user, $pass, $db){
$orgHost = $GLOBALS['TL_CONFIG']['dbHost'];
$orgUser = $GLOBALS['TL_CONFIG']['dbUser'];
$orgPass = $GLOBALS['TL_CONFIG']['dbPass'];
$orgDb = $GLOBALS['TL_CONFIG']['dbDatabase'];
$GLOBALS['TL_CONFIG']['dbHost'] = $host;
$GLOBALS['TL_CONFIG']['dbUser'] = $user;
$GLOBALS['TL_CONFIG']['dbPass'] = $pass;
$GLOBALS['TL_CONFIG']['dbDatabase'] = $db;
//eingebunden muss die Klasse bereits etc. (siehe Database getInstance)
$strClass = 'DB_' . ucfirst(strtolower($GLOBALS['TL_CONFIG']['dbDriver']));
$dbInst = new strClass();
$GLOBALS['TL_CONFIG']['dbHost'] = $orgHost;
$GLOBALS['TL_CONFIG']['dbUser'] = $orgUser;
$GLOBALS['TL_CONFIG']['dbPass'] = $orgPass;
$GLOBALS['TL_CONFIG']['dbDatabase'] = $orgDb;
return $dbInst;
}
}
Dürfte funktionieren wenn beide DBs vom gleichen Typ sind. Ansonsten wird es schwer wegen dem define DB_DRIVER.
Btw: Sollte man da vlt. mal eine Änderung Vorschlagen, so dass eine Anbindung einer zweiten DB einfacher wird? Neben raveolution und dir, xtra, hatte ich noch einen der mich per PN mal wegen so einem Problem angeschrieben hatte. Scheint also nicht so extrem exotisch zu sein. Wäre also evtl. nen Vorschlag für v3. Was meint ihr?
€: Alternatives Handling wegen dem erzeugen, wo Leos Fehlerbvehandlung schon mit enthalten ist:
PHP-Code:
class MyDB extends Database{
public static function connectTo($host, $user, $pass, $db){
$orgHost = $GLOBALS['TL_CONFIG']['dbHost'];
$orgUser = $GLOBALS['TL_CONFIG']['dbUser'];
$orgPass = $GLOBALS['TL_CONFIG']['dbPass'];
$orgDb = $GLOBALS['TL_CONFIG']['dbDatabase'];
$orgInst = self::$objInstance;
$GLOBALS['TL_CONFIG']['dbHost'] = $host;
$GLOBALS['TL_CONFIG']['dbUser'] = $user;
$GLOBALS['TL_CONFIG']['dbPass'] = $pass;
$GLOBALS['TL_CONFIG']['dbDatabase'] = $db;
self::$objInstance = nil;
$dbInst = self::getInstance();
self::$objInstance = $orgInst;
$GLOBALS['TL_CONFIG']['dbHost'] = $orgHost;
$GLOBALS['TL_CONFIG']['dbUser'] = $orgUser;
$GLOBALS['TL_CONFIG']['dbPass'] = $orgPass;
$GLOBALS['TL_CONFIG']['dbDatabase'] = $orgDb;
return $dbInst;
}
}
Lesezeichen