Andreas Korthaus: Objektorientierung in PHP richtig anwenden bei einem Forum

Beitrag lesen

Hallo!

Daweil könnte ich das auch ohne Objektorientierung aber ich will sie einfach mal testen ob es nützlich ist in Sachen: leichtes Ändern des Quellcodes, kürzerer/übersichtlicher Quellcode... .

Es ist sicher nicht immer kürzer, kommt drauf an. Aber wenn man es vernünftig macht ist es sicher einfacher zu warten, zu erweitern und besser verständlich. Und das sollte das Ziel sein.

Daher würde ich evtl. nicht überall Referenzen auf existierende Objekte speichern, sondern vielleicht einfach auf eine entsprechende ID, anhand der Du das entsprechende Objekt erzeugen kannst.

Wenn das Objekt Posting z.B. einen Konstruktor hat, der einen Parameter verlangt, welcher die ID des Postings sein soll, wird es sowieso nur nötig sein die IDs zu Speichern.

Ja, aber Referenzen auf Objekte zu speichern ist natürlich elegant ;-)

Muss ich auch mal überdenken. Ich habe keine Datenbank zur Verfügung.

Um so besser, das umgeht einige Probleme/Versuchungen ;-)
Dann wäre es natürlich ne ganz gute Übung die Threads in XML-Dateien zu speichern, ist natürlich wieder ein größeres Thema ;-)

Ich arbeite mit PHP Dateien, die Assoziative Arrays, welche alle Eingaben enthalten, haben. Natürlich sind alle Postings und Antworten und Userdaten aus Präsentation nicht in eine Datei gestopft.

Du könntest auch die Objekte selber serialisiert speichern, vielleicht ein Verzeichnis "Threads" und ein Verzeichnis "Postings", und dann pro Thread eine Datei mit der ThreadID als Namen, entsprechend für die Postings. Dann kannst Du über die ID die entsprechende Datei öffnen, das entsprechende Objekt wiederherstellen, kannst sie anzeigen, oder verändern udn wieder speichern...
Ist nur später nicht so gut veränderbar, naja.

Und die rollen-abhängigen Sachen, das ist recht einfach in der Klasse User zu implementieren. Einfach eine Methode isAdmin() und eine isRegisteredUser(), und entsprechend prüfen wenn da was rollen-abhängig angezeigt oder verändert werden soll.

Ich bevorzuge hier den einzelnen Usern Grade zu geben, die dann in einem Assoziativen Array $USER["grad"] sind. Z.B. Nach der Prüfung der Login-Eingaben des Users, wird ein Array USER erstellt, welches die Daten zum Aktuellen User, die ebenfalls in Assoziativen Array enthalten sind, zugewiesen bekommt. Zu den Daten der User gehören auch ihre Grade. siehe hier:

Erst sind von jedem USER die Daten in DBs bzw. php Dateien gespeichert.

$DATEN["DerRobert"]["name"] = "Robert";
$DATEN["DerRobert"]["nick"] = "DerRobert";
$DATEN["DerRobert"]["passwd"] = "12345";
$DATEN["DerRobert"]["grad"] = "1";
...

Das ist aber keine OOP.

OOP wäre sowas

$User = new User("DerRobert");
echo $User->getNick(); // DerRobert
echo $User->getName(); // Robert
echo $User->isAdmin(); // FALSE
echo $User->isRegisteredUser(); // TRUE

Wenn nun etwas nur vom Admin und Benutzer durchgeführt werden soll benutze ich diese Bedingte Anweisung:

if($USER["grad"]<=2)
{
...
}

if($User->isAdmin()) {
  ...
}

$test = new Test;
$test->intern = 'SO NICHT';
echo $test->intern;

hatte ich nie vor :)
Finde ich schade.

Jetzt findest Du es schade, später handelst Du Dir aber Probleme ein wenn Du Dich nichts dran hälst.

Viele Grüße
Andreas