Fabian St.: Datenbankzugriff in einer Klasse

Beitrag lesen

Hi!

ja, leider hat mein Webprovider noch nicht auf PHP5 upgegradet, warum auch immer, finde ich sehr schade. Vielleicht werde ich auch mein Anbieter wechseln.

Mittlerweile sollten wirklich alle Provider PHP5 anbieten - zumindest parallel neben der 4er Version.

Solltest du jedoch nur PHP4 zur Verfügung haben, so würde ich auf die direkte Ausgabe der Fehler mittels „echo“ verzichten und mir stattdessen ein „Fehler“-Array aufbauen, das am Ende mittels einer zusätzlichen Methode durchlaufen wird.

sind echo-Befehle in Funktionen/Methoden generell eher nicht zu empfehlen?

Ich persönlich vermeide dies soweit es möglich ist, da es mitunter bei größeren Funktionen leicht undurchsichtig wird, woher jetzt diese Meldung kommt, weil diese Funktionen meist in externe Dateien ausgelagert sind und nur bei Bedarf aufgerufen werden.

Ich hatte mir für die Fehlerbehandlung folgendes überlegt:
Eine weitere Klasse, z.b. Error-Handling, diese dann an MySQL_db vererbt, und bei Fehlerfall auf Methoden der Error-Handling-Klasse zugreifen. Kann man eigentlich in PHP4 vererben, und wäre das eine gute Idee?

Vererbung macht in diesem Falle wenig Sinn und ist so, wie du es beschreibst, auch nicht möglich. Der Sinn einer Vererbung besteht darin, einen bestehenden Code zu erweiterten, ohne ihn ändern oder duplizieren zu müssen, d.h. eine Vererbung macht insbesondere dann Sinn, wenn du eine Klasse noch weiter konkretisieren und auf eine ganze spezielle Anwendung spezialisieren möchtest.
Ich würde daher vorschlagen, in deinem Konstruktor eine neue Instanz der Error_Handling-Klasse anzulegen und der DB_MySQL-Klasse eine Methode hinzufügen, die ihrerseits eine öffentliche Methode der Error_Handling-Klasse aufruft und deren Rückgabewert an das eigentliche Script zurückgibt.

Wie du im Manual nachlesen kannst, gibt es bereits unter PHP4 die Möglichkeit, mittels »extends« eine Kindklasse von der Elternklasse abzuleiten (http://de.php.net/manual/de/keyword.extends.php).

Grüße,
Fabian St.