EvilO
Erfahrenes Mitglied
Hi, also erstmal finde ich deine Lösung da ganz gut, ich benutze die Registry auch ganz gerne mal
Bei meiner Datenbankklasse (die eigentlich CMS_DB heisst) handelt es sich eigentlich um eine Factory Klasse und nicht um eine Datenbankabstraktion (wie z.B. in PEAR das DB oder MDB2 Paket), ich stelle also immer über diese Klasse die Datenbankverbindung her, allerdings kann ich halt über Parameter noch bestimmen welchen Datenbanktreiber ich benutzen will, also etwa so:
Als Datenbanktreiber benutze ich hauptsächlich PDO. Natürlich kann es manchmal sinnvoll sein eine erzeugte Datenbankverbindung zusätzlich in einer Registry Klasse zu speichern, da man ja nicht immer wieder alle Parameter bei getInstance() angeben will, allerdings brauche ich ja meist nur die Standardverbindung, die ich dann halt sehr bequem mit CMS_DB::getInstance() ohne Parameter erhalte.
Vielleicht inspiriert das ja den ein oder anderen, mal ein wenig mehr Ordnung ins allgemeine Klassenchaos zu bringen.
P.S. Achja, ich benutze die __autoload() Funktion um die Klassen zu laden, desshalb fehlen include_once() bzw. require_once() Anweisungen im Code.
P.P.S. Bezüglich "den Namen kennen": Da hast du zwar recht, aber du musst ja auch überall den Namen deiner Registry kennen
Bei meiner Datenbankklasse (die eigentlich CMS_DB heisst) handelt es sich eigentlich um eine Factory Klasse und nicht um eine Datenbankabstraktion (wie z.B. in PEAR das DB oder MDB2 Paket), ich stelle also immer über diese Klasse die Datenbankverbindung her, allerdings kann ich halt über Parameter noch bestimmen welchen Datenbanktreiber ich benutzen will, also etwa so:
PHP:
class CMS_DB
{
private static $_instances = array();
private function __construct() { }
public static function getInstance(array $pParams = null)
{
$id = '';
if($pParams !== null)
{
foreach($pParams as $p)
{
$id .= $p;
}
}
$id = md5($id);
if(!isset(self::$_instances[$id]))
{
if($pParams === null)
{
$config = CMS_Config::getInstance();
$class = 'CMS_DB_' . $config->db->type;
$pParams = $config->db->getValues();
if($config->db->type === null)
{
throw new CMS_DB_Exception('No database adapter specified');
}
}
else
{
$class = isset($pParams['type']) ? 'CMS_DB_' . $pParams['type'] : null;
if($class === null)
{
throw new CMS_DB_Exception('No database adapter specified');
}
}
self::$_instances[$id] = new $class($pParams);
CMS_Profiler::getInstance()->add("New database connection established");
}
return self::$_instances[$id];
}
}
Vielleicht inspiriert das ja den ein oder anderen, mal ein wenig mehr Ordnung ins allgemeine Klassenchaos zu bringen.
P.S. Achja, ich benutze die __autoload() Funktion um die Klassen zu laden, desshalb fehlen include_once() bzw. require_once() Anweisungen im Code.
P.P.S. Bezüglich "den Namen kennen": Da hast du zwar recht, aber du musst ja auch überall den Namen deiner Registry kennen
Zuletzt bearbeitet: