zippex: Grundsatzfragen zur Verwendung von Klassen

Beitrag lesen

Hallo!
Danke für die weiteren Antworten. Ich hab inzwischen gemerkt, dass die entsprechenden Klassen für die Objekte per include geladen werden müssen, bevor session_start() aufgerufen wird - sonst erkennt php wohl die Objekte in der Session nicht mehr. Also

include('user-class.php);
session_start();
$userObj = new User();
$userObj = $_SESSION['ablegter_user'];

scheint zu klappen. Ich bin inzwischen wieder ein bisschen am zweifeln, ob eine durchgehendes Vorgehen mit Objekten sinnvoll ist. Paradebeispiel User:
Die Klasse User enthält auch die Funktionen
* getUser (gibt mit die Werte der internen Variablen _username, _passwort, ...)
* setUser (ermöglicht mir das Ändern von Daten im Objekt).
Um das in das Datenbank zu speichern, braucht die Userklasse dann aber auch eine private Funktion
* loadUser(lädt User aus DB in interne Variablen) und
* saveUser(schreibt interne Variablen in Datenbank).

Das sind vier Funktionen, wo mir "früher" doch einfach zwei gereicht haben (getUserFromDb liefert direkt Array der Datenbank-Inhalte, saveUsertoDb speichert übergebene Parameter direkt wieder in der Datenbank).

Diesen Mehraufwand fand ich noch einigermaßen vertretbar. Aber was mache ich, wenn ich jetzt nicht nur einen, sondern eine Liste von Usern brauche. Eine Funktion "getAllUsers" wäre in der Klasse "User" wohl ziemlich deplatziert, denn die Klasse "User" ist nur einer. Also bräuchte ich eine Klasse "UserList", die mit über getUserList ein Array von Benutzerobjekten zurückgibt. Puh, da fängt es dann schon an, sehr umständlich zu werden.
Früher hab ich da einfach die oben genannte getUserFromDb-Funktion benutzt, die mir z.B. über einen Parameter $id=null ALLE Benutzer zurückliefert und über $id=17 nur Benutzer 17. Der Aufwand für konsequente Klassen wächst zusehens.

Ich wollte gestern eigentlich schon mit programmieren anfangen, hab dann aber doch den ganzen Abend lang gegrübelt. Eine "Mischform" erscheint mir am einfachsten, bei der ich "Dinge die etwas machen" (z.B. Funktionen für Login und Zugriffe auf die Datenbank) in eine Klasse stecke. Ein Datenbank-Objekt benutze ich dann, wenn ich irgendwas von der Datenbank will.
Wenn ich jedoch nur mit Daten arbeite (z.B. die oben beschriebenen User-Daten), dann ist das zu viel Aufwand, alles in Objekten zu kapseln. $db->getResult gibt mir auch ein Array von Benutzer-Arrays, wenn die dann noch assoziativ sind, habe ich quasi genau den gleichen leichten Zugriff wie über Objekte. Ein Ergebnis-Array wäre also
[0]["username" => "karl", "password" => ".."]
[1]["username" => "egon", "password" => ".."]
[2]["username" => "bert", "password" => ".."]
bei der User-Liste, und nur
[0]["username" => "ken", "password" => ".."]
wenn ich nach einem bestimmten User gesucht habe.

Anders gesagt: ich will nur etwas in Klassen stecken, wenn viele "Subfunktionen" nötig sind, die mich aber eigentlich nicht interessieren. Z.B. könnte ich mir auch bei einer Dateiverwaltung von hochgeladenen Dateien vorstellen, dass ich das in eine Klasse stecke. Über $filemanager->readDir($dir), $filenamager->upload($file) etc. hätte ich dann "bequemen" Zugriff, was da im Hintergrund alles passiert interessiert mich nicht.

Wie gesagt, wenn von der Klasse etwas "gemacht" wird, dann finde ich den Einsatz logisch. Wenn eine Klasse nur Abbild von Daten ist, die ich auch auf einfacherem Wege aus der DB bekomme, dann sehe ich da nicht so den Sinn.
Und bei späteren Erweiterungen/Änderungen? Wird später z.B. der User noch mit "Adresse" erweitert, dann gibt es im assoziativen Rückgabearray einen neuen Schlüssel "Adresse". Funktionen/Module, die User-Daten benutzen und "Adresse" nicht kennen, stört das auch nicht und Funktionen/Module die "Adresse" brauchen, können sie nutzen.
Gute Idee (allgemein)?
Gute Idee (für ein Projekt, bei dem ich nur ein paar Wochen Zeit habe)?
Viele Grüße
zippex :)