Moin!
Dein Konstruktor tut zuviel.
Ich verstehe nicht worauf Du hinauswillst, erkläre es mir bitte ohne Polemik.
Ein Konstruktor sollte maximal die per Parameter übergebenen Werte in internen Feldern ablegen, mehr nicht. Die Arbeit kommt, wenn das Objekt instanziiert ist, danach durch Aufrufen von Methoden.
Dein Konstruktor stellt anscheinend eine Verbindung zur Datenbank her, welche scheitern kann, und übernimmt auch noch das Fehlerhandling in diesem Fall. Ohne die vorgesehene globale Variable abzufragen kriegt der Nutzer dieses Objekts also gar nicht mit, dass er es mit einem nicht funktionsfähigen DB-Objekt zu tun hat - außer er ruft danach irgendeine Methode auf, die dann vermutlich scheitern wird, oder seltsame Dinge tun.
Klassiker ist, dass PHP, sofern eine MySQL-Connection nicht besteht, implizit bei einem Aufruf von mysql_query() mit dem in der php.ini konfigurierten Standardwerten eine Connection herstellen will.
Damit wir nicht aneinander vorbeireden:
Ich baue für DB-Zugriffe flache Hierarchien, nicht erst seit heute. Meine Basisklassen dazu (Perl, PHP) stellen jeweils ein Objekt bereit, das ist im Fall PHP nicht etwa das PDO-Objekt selbst, sondern eine Instanz _meiner_ Klasse. Diese Instanz hat das PDO-Objekt als Attribut. Im Fall Perl mache ich das genauso, die Instanzen meiner Klassen enthalten die DB-Session als Attribut. Sowohl in Perl als auch in PHP heißt dieses Attribut DBH (Data Base Handler) und dieses Attribut ist private.
Hier ist was zum Gucken, um dich auf den neuesten Stand zu bringen: http://www.youtube.com/playlist?list=PLBDAB2BA83BB6588E
- Sven Rautenberg