dedlfix: Klassen sind ja toll, aber wie gehts weiter?

Beitrag lesen

echo $begrüßung;

Aber ich sehe z.B. einen funktionalen Vorteil wenn ich eine Datenbank-Klasse schreibe, auch wenn diese letztendlich nicht sehr viel mehr kann als die normalen DB-Funktionen selbst auch.

Die Datenbankklasse ist ein recht typisches Beispiel, wenn man mit OOP anfängt. Doch wenn sie wirklich nicht viel mahr kann als die bisherigen Funktionen zu kapseln, bist du mit einer bereits existierenden Klasse (mysqli oder PDO) schneller am Ziel. Vielleicht solltest du dann dein Ziel ändern. Beispielsweise könntest du sämtliches Datenquellenhandling aus der Geschäftslogik verbannen, so dass am Ende ein einzelner Funktions- oder Methodenaufruf bleibt, der dir deine Daten fix und fertig abgefragt (bzw. dies veranlasst) und gebündelt übergibt.[1]

Das Prinzip der Vererbung habe ich verstanden, aber ich meine, wenn ich alles ineinander vererbe bringt mir das auch nichts, oder liegt hier ein Denkfehler?

Letztlich sollte die Kapselung in Klassen schon ein sinnvolles Gebilde ergeben. Alles in eine große Klasse zu stecken ist am Ende auch nicht besser als ein großes flaches Script.
Bleiben wir beim Beispiel Datenbank. Eine Basisklasse könnte beispielsweise generell mit einer Tabelle umgehen. Sie kann Daten abfragen, hinzufügen, ändern und löschen, beherrscht also das RUDI-Prinzip. Sie weiß aber nichts spezielles von der Tabelle, mit der sie später mal zu tun haben wird, also die Namen der Felder und welches der Primärschlüssel ist. Diese Spezialisierung kommt dann in eine erbende Klasse. Und davon gibt es dann soviele wie du Tabellen hast.

Diese Tabellenbasisklasse muss auch nicht das komplette Datenbankhandling implementiert haben, sondern nur den Teil, der die Statements zusammensetzt. Das eigentliche Kommunizieren mit der Datenbank übernimmt eine andere Klasse, die mit der Tabellenklasse nicht weiter verwandt sein muss. Diese Datenbankklasse hat nur Funktionen zum Abarbeiten von übergebenen Statements. Man kann sie auch etwas komfortabler gestalten, so dass sie Statements mit Platzhaltern und getrennt davon die Werte übernimmt, und die Werte datenbankspezifisch maskiert in das Statement einfügt (falls man nicht sowieso Prepared Statements der DB-API nutzen kann).

... Zend Framework.

Danke, das werde ich mir mal genauer ansehen. Ich fürchte nur - daher habe ich auch von PEAR abstand gehalten, dass das ganze schon etwas zu komplex sein wird, als dass ich mir damit mehr verständnis erarbeiten kann.

Nun, du musst ja nicht gleich alles zu verstehen versuchen. Fang mit einem Tutorial an und achte dabei immer mit darauf, welche Funktionalitäten auf welche Weise in bestimmte Klassen aufgeteilt worden sind.

PEA ist mehr oder weniger eine lose Klassensammlung. Das Zend Framework will eine komplette Rundrum-Unterstützung bieten, ist aber auch so gestaltet, dass man einige Teile komplett ignorieren kann, wenn man sie nicht braucht oder was anderes stattdessen verwenden will.

[1] Das ist bei großen Datenmengen nicht besonders effektiv, doch auch hier gibt es unter PHP weitergehende Möglichkeiten. Man kann ein simuliertes Array zurückgeben, das erst beim Zugriff die jeweiligen Werte abholt. Dies kann man mit der Funktionalität der Standard PHP Library implementieren.

echo "$verabschiedung $name";