pl: PHP Oop Datenbank Klasse

Beitrag lesen

Moin,

ERRMODE::EXCEPTION ist auf jeden Fall eine gute Idee. Zwei Anmerkungen zur Namensgebung:

  1. Bedenke, dass PDO ein austauschbarer Layer ist, der also neben MySQL auch andere Engines unterstützt. Wenn Du also nur mit MySQL arbeitest und nie vorhast eine andere Engine einzusetzen, wäre der Name DB für Deine Klasse ok. Kommen jedoch weitere Layer (Sybase, Oracle..) ins Spiel, kann das anhand des Klassennamen nicht unterschieden werden. Meine Idee wären Subklassen, DB::MySQL, DB::Oracle usw.

  2. Der Name der Methode getInstance() ist irreführend weil ja der Konstruktor die Methode ist, welche die Instanz erstellt. Deine Methode getInstance() erstellt ja keine Instanz Deiner Klasse sondern stellt eine DB-Sitzung her, also eine Instanz der Klasse PDO.

Wenn man von PDO erben könnte (was ich nicht beurteilen kann) wären für Deine Klassen auch Namen wie PDO::MySQL, PDO::Sybase usw. denkbar. Ich würde mir das mal angucken. Auf jeden Fall ist eine solche Nomenklatur, was den Aufbau von Klassenhierarchien betrifft, eine Sache die sich auch in Perl bewährt hat, siehe CPAN.

Ansonsten führt ERRMODE::EXCEPTION zwangsläufig zu einer auf Exceptions basierenden Fehlerbehandlung, Stichwort Exception Chaining. D.h., daß Exceptions bis zur Anwendung Deiner Klasse duchgereicht werden und der Anwender das in Sachen Fehlerbehandlung berücksichtigen muss. Z.B. indem er jeden Methodenaufruf zwingend in einen try/catch Block setzen muss.

PS: Die Übergabe des Ports würde ich auf jeden Fall noch reinnehmen und den Default auf 3306 setzen. Ein Default für den Host jedoch würde ich nicht setzen, das ist ein systematischer Fehler weil Du nicht gleich merkst, wenn Du auf dem falschen Host gelandest bist.