PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP 5: Elementfunktionen als Layer?


Marscel
2005-12-18, 22:13:27
Das System sieht so aus, ich habe einen Kern, der dynamisch alle möglichen Module lädt. Zu diesen Modulen soll auch ein Datenbank Modul gehören, das den Namen "database" trägt und dessen Funktionen halt die Datenbankanweisungen sind.

$this->database->db_query("SELECT XYZ...");

Wäre alles schön und gut, wenn da nicht die Sache wäre, dass diese Funktionen nicht für einen Datenbanktypen nutzbar sein soll (z.B. nur MySQL), sondern auch je nach Einstellung (die der Konstruktor ermittelt) den Datenbanktyp ermittelt (z.B. PGSQL).

Sodass $this->database->db_query("SELECT XYZ..."); im Falle von MySQL auf die PHP-Funktion mysql_query("SELECT XYZ..."); und im Falle von PGSQL auf die Funktion pg_query("SELECT XYZ...") zugreift.

Das soll nämlich so sein, dass "database" den Datenbanktyp ermittelt und am besten ein Objekt zu dieser lädt.

Geht das irgendwie? Oder muss man zwangsweise eine Zwischenklasse erstellen (z.B. $this->database->db->db_query("...");) ?

Expandable
2005-12-18, 22:21:33
Hä?

Irgendwann baust Du doch mal eine Verbindung zur DB auf, da muss ja klar sein, ob das MySQL, PostgreSQL, Oracle oder sonst was ist.

Du schreibst dann einfach eine Funktion connect(), die Dir ein Database-Objekt zurückgibt. Für jeden zu unterstützenden Datenbanktypen erweiterst Du die Klasse (per extends) um die entsprechenden Funktionen und tust dabei z.B. query() "überladen". Das Objekt das connect() nun zurückgibt, ist eben eine Instanz der gewünschten Datenbankklasse.

Tipp: Es gibt bereits eine sehr gute Datenbankabstraktionsbibliothek, die sehr viele Datenbanktypen unterstützt: ADOdb, bzw. auch ADOdb Lite (schneller), letztere habe ich aber noch nicht getestet, soll aber von den Grundfunktionen her zu ADOdb kompatibel sein. Wenn's geht, werde ich demnächst auch auf ADOdb Lite umsteigen...

Marscel
2005-12-18, 22:35:18
Irgendwann baust Du doch mal eine Verbindung zur DB auf, da muss ja klar sein, ob das MySQL, PostgreSQL, Oracle oder sonst was ist.


Ja, das steht aber in der config-Datei drin, die der database-Konstruktor ausließt.

Mit dem extends bringst du mich auf eine Idee, die das ganze System zwar ein wenig aus dem Konzept bringen würde, aber auch den gewünschten Effekt hätte. ;)