dedlfix: Grundsatzfragen zur Verwendung von Klassen

Beitrag lesen

echo $begrüßung;

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.

Ob includiert werden _muss_ oder nicht hängt davon ab, wie sich dein Code in verschiedenen Dateien aufteilt. Es muss nur die Definition der Klasse bekannt sein. Ob der Code dazu includiert wird oder im Script steht ist dabei irrelevant.

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

Wenn nicht noch irgendwelche Seiteneffekte im Konstruktor stattfinden ist der Konstruktoraufruf nicht erforderlich. Die Objektvariablen werden sowieso durch das Lesen der Sessiondaten überschrieben.

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).

Ja, das ist die Frage. Soll sich die Kuh selber melken oder soll sich die Milch selbst aus der Kuh melken?

Diesen Mehraufwand fand ich noch einigermaßen vertretbar.

PHP ist eigentlich ausgelegt, um auf einfache Art und Weise Webseiten zusammenzubauen. Natürlich kann man damit versuchen so zu programmieren, wie es unter beispielsweise C# üblich/notwendig ist. Was man unter PHP einfach mit einem Array macht, macht man dort vielleicht mit einer Collection. Natürlich kann man sich die Collection unter PHP nachbauen, aber entspricht das noch der Philosophie von PHP?

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.

Vielleicht brauchst du auch ein (oder mehrere) Datenbankobjekte, die Methoden haben, um einen User oder ein Array mit allen Usern zurückzuliefern. Vielleicht helfen dir die Ansätze von PEARsDB_DataObject oder DB_Table weiter.

Puh, da fängt es dann schon an, sehr umständlich zu werden.

Ich kann dir nicht sagen, wie du am besten zu deinem Ziel kommst, da ich dieses nicht kenne. Was dir hilft wäre Erfahrung, und die bekommt man auch, indem man mal in die falsche Richtung läuft. Dann weiß man, dass dieser Weg für bestimmte Sachen ungeeignet ist, sich vielleicht aber für andere Dinge eignet.

echo "$verabschiedung $name";