Hallo!
Versuche eher mal die Objekte aus der der Realität zu modellieren.
Das ist mal ein sehr schöner Tipp. Werde es auf jedenfall so probieren.
Da wären zum einen die User, von denen gibt es 3 verschiedene. Viele Sachen sind bei allen Usern gleich, also alle haben einen usernamen, alle ein Passwort, brauchen eien Methode zum erzeugen, löschen...
und einige User haben besondere Eigenschaften und methoden, z.B. der Admin.
^^^^^^^^^
|||||||||
mit Objekten aus der Realität modelliert.
Auch ein sehr schöner Tipp es so anzugehen.
Dann hast Du auf der anderen Seite Threads und Postings, wobei man im Thread-Objekt auch eine Liste mit Referenzen auf die zugehörigen Postings verwenden kann, oder man verwendet eine extra-Klasse für die Zuordnung. So eine Klasse Thread könnte eine Methode "getPostingList()" haben, die die zugehörigen PostingIDs zurückgibt, mit denen Du dann die Posting-Objekte erzeugst, die dann wieder Methoden haben die die entsprechenden Daten für die Ausgabe zurükgeben.
Gefallt mir gut. Warum?:
Es wird im Objekt Thread eine Methode geben, die die IDs der zugehörigen Postings/Antworten, zurück gibt z.B. in einem Array. Diese Methode ist aber in meinem Fall nicht notwendig, da die zugehörigen postings die selbe Id kriegen werden wie der Thread. Eine Methode könnte mir aber die ID des Objektes zurückgeben.
Ich könnte jetzt eigentlich die Postings zu dem Thread einfach mit einer Funktion ausgeben lassen. Aber mit einem extra Objekt Posting könnt ich noch eine extra Methode zum Testen des zum ausgebenden Textes hinzufügen. Vielleicht eine die Wörter die üüüüüüüüüüüüüüüüüüübbbbbbbbbberlang sind zerschneidet.
Ob das gut gedacht ist, werde ich ja spätestens bemerken wenn ich mal das Forum gemacht habe.
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... .
Eine andere Variante, die ich vermutlich bevorzugen würde wäre, wenn das Thread-Objekt eine Methode hätte wie fetchPostings(), welche entsprechend die Postings recht performant aus der DB auslesen kann, und der Reihe nach alle Posting-Objekte erzeugen kann. Und dabei die Objekte nur so weit füllen wie sinnvoll/notwendig, bei der Posting-Übersicht braucht man z.B. noch nicht den kompletten Text jedes Postings...
Das muss ich mal gut Überdenken.
Wenn Du ein bisschen überlegst findest Du vielleicht noch mehr sinnvolle Objekte.
Das probiere ich schon die ganze Zeit.
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.
Dann solltest Du noch drauf achten, dass Du die Präsentation von der Datenhaltung trennst. Das funktioniert z.B. hervorragend durch Verwendung einer Template-Engine für die Präsentation der Daten, und/oder auf der anderen Seite durch Verwenden von Data-Access-Objects, das heißt in der "Business-Logik" änderst Du nur die Eigenschaften von Objekten, und führst entsprechende Änderungen in der Datenbank selbst über spezielle Objekte/Methoden durch.
Muss ich auch mal überdenken. Ich habe keine Datenbank zur Verfügung. 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.
Aber versuche nicht alles auf einmal, das wichtigste ist dass Du ein Verständnis für die oben genannten Objekte bekommst, die aus der Realität, denn das ist IMHO der beste Weg OOP zu verstehen, nicht das sture verwenden von Klassen und Objekten nur weil man glaubt es zu brauchen oder weil es andere auch machen.
Ich meine ich habe die oben genannten Objekte und der Sinn Verstanden. Es kann aber auch sein, dass ich das ganze anders als ich soll verstanden habe aber irgendwann wirds schon werden glaub ich. Ich probiere erstmal die beiden Verweise, die du mir geschickt hast, aus.
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";
...
Wenn sich der User jetzt mit den nick DerRobert mit einem passwort versucht einzuloggen, wird getesteten ob
$DATEN["DerRobert"]["passwd"] == passwort
ist und bei true passiert dann:
$USER = $DATEN["DerRobert"]
=>
$USER["name"]= "Robert";
$USER["nick"] = "DerRobert";
$USER["grad"] = "1";
...
Admins bekommen den Grad 1
Benutzer den Grad 2
Gäste den Grad 3
Wenn nun etwas nur vom Admin und Benutzer durchgeführt werden soll benutze ich diese Bedingte Anweisung:
if($USER["grad"]<=2)
{
...
}
http://java.sun.com/docs/books/tutorial/java/concepts/index.html
http://www.php-mag.net/itr/online_artikel/show.php3?id=284&p=0&nodeid=114
Java kann nciht schaden.
Werde ich mir jetzt mal durchlesen!
$test = new Test;
$test->intern = 'SO NICHT';
echo $test->intern;
hatte ich nie vor :)
Finde ich schade.
Ich bedanken mich für deine Hilfen/Tipps und für deine ausführlichen Antworten.
Guten Tag/Sonntag
mfG Robert