Frage zu Methodengestaltung am Beispiel eines Nachrichtenskripts

GuenniFD

Mitglied
Hallo zusammen,
ich hab eigentlich mehr so eine allgemeine Frage, die eure Erfahrungen beim oo coden zielt. Und zwar geht es hier beispielweise, um eine Methode, die bei einem Nachrichtenskript, eine entsprechende Nachricht anzeigen soll. Die übergabe der Nachrichtenid erfolgt per get und die Abfrage kontrolliert dann ja auch, ob die Nachricht auch wirklich zu dem benutzer gehört. Jetzt kann man ja gucken, wenn ein Ergebnis in der SQL Anweisung zurückkommt ist alles paletti, andernfalls versucht da jemand was zu lesen was nicht zu ihm gehört. Jetzt meine Frage, sollte man da eine Exception werfen oder die Klasse so gestalten, dass ein false zurückgegeben wird oder wie ist das in Verbindung mit dem "Hauptprogramm" dann am sinnvollsten(also damit man den code schön gestaltet um ihn verständlich zu halten)
hier ein klassenausschnitt:
Code:
class message {	
        public function show_message() {
		$select_message = mysql_query("SELECT betreff, sender, timestamp, nachricht, empfaenger FROM nachrichten WHERE (empfaenger = '".strtolower($_SESSION['user'])."') AND (id = '".$_GET['messageid']."') LIMIT 1 ;");
		while($zeile = mysql_fetch_array($select_message)) {
			$message_data[0] = $zeile[0];
			$message_data[1] = $zeile[1];
			$message_data[2] = $zeile[2];
			$message_data[3] = $zeile[3];
		}
		return $message_data;
	}
}
und noch eine Frage:
Sollte man die ausgelesenen Daten in ein Array basteln und zurückgeben oder eher über die Klasseneigenschaften arbeiten?
Hab noch nicht so viel Erfahrung da und finde auch keine schönen Vorlagen, wo ich mir für sowas selber Antworten zusammensuchen könnte.
Ich hoffe ihr könnt mir helfen...
vielen dank
MFG
Günni
 
  1. Gefällt mir der Methodenname nicht. Eine Methode, die mit show beginnt, sollte IMHO eine Ausgabe erzeugen. Passender wäre hier getMessage.
  2. Bevorzuge ich benannte Arrayindizes, anstatt nummerierte.
  3. Wenn die Klasse nicht eine allgemeine und vollständige Nachrichtenverwaltung beinhaltet, sondern nur für eine einzelne Nachricht da ist, würde ich anders vorgehen:
    • Der Konstruktor bekommt die Nachrichten-ID übergeben und liest die Nachricht aus.
    • Eine Methode isError ermittelt, ob ein Fehler vorliegt.
    • Die einzelnen Werte der Nachricht erhält man über Getter (z.B. getSender).
    • Eine Methode getErrorMessage liefert ggf. eine Fehlermeldung.
  4. Kann die Klasse mehr, als nur mit einzelnen Nachrichten umgehen kann, so halte ich die Rückgabe in einem Array für sinnvoll und würde, wie es in PHP häufig gemacht wird, im Fehlerfall false zurückgeben. Eine weitere Methode getLastError könnte eine Fehlerbeschreibung zurückgeben.
Gruß hpvw
 
erstmal vielen Dank für deine Antwort (weil irgendwie find ich kaum leute, die mir bei meinem Problem behilflich sein können)
jo mit der Methodenbezeichnung hast du wohl recht, da wollte ich wohl vorher noch die Smarty befehle reinmachen, aber das wäre ja quatsch.
Es soll sich bei dieser Klasse um eine vollständiges Nachrichtensystem handeln, also ein kleines pms-system, demnach treten dann auch mehr als eine Nachricht auf.
Ich hatte halt an Exceptions gedacht, weil die ja in java genutzt werden und in PHP5 auch genutzt werden, dass man das irgendwie so angeht, aber im mom hab ich eh noch Schwierigkeiten meine OOP Kenntnisse umzusetzen, weil es an den Feinheiten wie jetzt hier z.b. ein Array zurückgeben oder in die Objekteigenschaften setzen hapert.
benannte arrays einfach um besser unterscheiden zu können oder?
mit den gettern da bin ich mir halt unsicher, weil ist es net ein wenig kompliziert, wenn ich mir dann jeden Wert einzeln aus der DB hole und es wieder zusammensetze? Das sind ja dann unnötig viele Datenbankanfragen, oder?
Wenn ich jetzt z.b. das zusammensetzen will und überprüfe dann per $_GET was angezeigt werden soll, also bspw. $_GET['action']=view dann soll die übersicht angezeigt werden, sowas pack ich ja dann in mein "Hauptprogramm" und nicht in die Klassen oder?
Ich finde auch halt keine Skripte wo ich mir das z.b. schonmal angucken könnte, also in dieser Hinsicht wäre ich auch für jeden Tipp dankbar..
 
Zurück