Einem Object Werte oder Referenz übergeben?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • phpMorpheus2
    replied
    Originally posted by unset View Post
    Ich sag dir ja nicht zum ersten mal: Guck wie die großen Frameworks das gelöst haben.
    Mach ich auch. Ist mir dann auch eingefallen einfach beim zf zu schaun.

    Leave a comment:


  • unset
    replied
    Originally posted by phpMorpheus2 View Post
    Stimmt wohl. Organisation ist alles und gerade für einen Anfänger wie mich, ist dann die "Organisation" das wohl größte Problem.
    Krieg ich aber hin ;-)
    Ich sag dir ja nicht zum ersten mal: Guck wie die großen Frameworks das gelöst haben.

    Leave a comment:


  • phpMorpheus2
    replied
    Originally posted by unset View Post
    Und wo ist das Problem? Ein durchschnittliches Projekt von mir hat (jenseits der eingesetzten Frameworks) gerne mal mehrere Hundert eigene Klassen – in jeweils eigenen Dateien. Alles eine Frage der Organisation.
    Stimmt wohl. Organisation ist alles und gerade für einen Anfänger wie mich, ist dann die "Organisation" das wohl größte Problem.
    Krieg ich aber hin ;-)

    Originally posted by PHP-Desaster
    Du leidest unter der klassischen Angst vor dem Hinzufügen neuer Klassen.
    Japp

    Leave a comment:


  • PHP-Desaster
    replied
    Du leidest unter der klassischen Angst vor dem Hinzufügen neuer Klassen.

    Leave a comment:


  • unset
    replied
    Und wo ist das Problem? Ein durchschnittliches Projekt von mir hat (jenseits der eingesetzten Frameworks) gerne mal mehrere Hundert eigene Klassen – in jeweils eigenen Dateien. Alles eine Frage der Organisation.

    Leave a comment:


  • phpMorpheus2
    replied
    Ja aber dann habe ich später ja zich php-Dateien!?

    Leave a comment:


  • PHP-Desaster
    replied
    Dein Problem liegt einfach darin, dass du die Methoden in bereits vorhandene Klassen einsortieren willst. Wie du schon sagst, die get_user_picturepath-Methode passt nicht recht in die user-Klasse, aber auch irgendwie nicht in die picture-Klasse, beide hätten aber was mit dieser Methode zu tun. Lösung: Eine neue Klasse erstellen, welche dann über eine user- und picture-Instanz den Vorgang ausführen kann. Und alles was du momentan schon an Userbild-Methoden in der picture-Klasse hast, refaktorisierst du in diese Klasse.

    Leave a comment:


  • phpMorpheus2
    replied
    Ich habe oft das Problem, nicht zu wissen, wo ich eine Methode einordnen soll.
    z.B. besitzt die Klasse "user" mehrere Methoden, welche den user betreffen wie z.B. ein bestimmtes Detail über den User ausgeben wie das Alter o.ä. und dann gibt es Situationen, da möchte ich z.B. den Pfad und den Dateinamen des Profilbildes des Users haben.

    Erstelle ich nun eine neue user Methode z.B. get_user_picturepath oder verbau ich diese lieber in der class.picture.php, in welcher auch uploadmethoden des userbildes vorhanden sind?

    Hach, das ist manchmal garnicht so leicht finde ich

    Leave a comment:


  • phpMorpheus2
    replied
    Originally posted by onemorenerd View Post
    Erstmal alles in der Funktion lassen. Aber sobald sich der selbe oder ähnliche Code an anderer Stelle wiederholt, anfangen zu refaktorieren.

    Les- und Wartbarkeit sollte allerdings auch eine Rolle spielen.
    Hm.. Gut.

    Leave a comment:


  • PHP-Desaster
    replied
    Sobald eine meiner Methoden länger wie 20 Zeilen wird, versuche ich diese aufzuteilen. Generell solltest du in einem kurzen Satz erklären können, was die Methoden macht. Benötigst du ein und oder mehrere Sätze, wird es Zeit zum Aufteilen. Der Vorteil der Aufteilung ist die Übersicht und erbende Klassen können einzelne Teile der Funktion gezielt überschreiben. Sehr gerne nutze ich eine einzelne öffentliche Methode, welche den eigentlichen Vorgang an mehrere Untermethoden delegiert. Über Chaining ist das super zu lesen:
    PHP Code:
    class Blubb {
        public function 
    doIt() {
            return 
    $this
                
    ->loadData()
                ->
    transformBlubb()
                ->
    somethingElse()
                ->
    createResponse();
        }

    Im Fehlerfall wird einfach eine Exception geworfen. Außerdem ist es für diese Methode völlig transparent, ob eine Untermethode auf weitere Objekte zugreift (die createResponse-Methode zum Beispiel auf eine ResponseRenderer-Klasse oder loadData auf die Datenbank?), der Ablauf ist aber ganz klar definiert. Und im Fehlerfall? Einfach die Exception fliegen lassen.

    Leave a comment:


  • onemorenerd
    replied
    Erstmal alles in der Funktion lassen. Aber sobald sich der selbe oder ähnliche Code an anderer Stelle wiederholt, anfangen zu refaktorieren.

    Les- und Wartbarkeit sollte allerdings auch eine Rolle spielen.

    Leave a comment:


  • phpMorpheus2
    replied
    Ich sehe immer wieder, dass viele Leute Ihre Klassen in ganz viele Methoden aufteilen und diese nacheinander abklappern.

    Jedoch finde ich es manchmam übertrieben, für selbst nur eine abfrage eine Methode zu basteln welche nur 1. programmzeile enthält.

    Ist das so "gängig" oder schon eine Art der übertreibung?

    Wenn ich finde, eine Methode kann so gestaltet bleiben, auch wenn Sie etwas größer ist, jedoch keine Funktion in der Methode jemals von etwas anderem gebraucht wird, so bleibt die große Methode so, wie sie ist.

    Oder doch lieber alles schön aufteilen?

    z.B. jede SQL Abfrage und das Ergebnis return'n usw.

    Danke

    Leave a comment:


  • phpMorpheus2
    replied
    Originally posted by unset View Post
    Noe, ist aber auch nicht nötig. Im Erfolgsfall hast du das Objekt, im Fehlerfall eine Exception.
    Auch war.

    Leave a comment:


  • unset
    replied
    Noe, ist aber auch nicht nötig. Im Erfolgsfall hast du das Objekt, im Fehlerfall eine Exception.

    Leave a comment:


  • phpMorpheus2
    replied
    Habe ich eine Möglichkeit, beim instanzieren eines Objects einen Wert zurückzugeben?

    Ich setze versch. Werte in der __construct, aber diese kann keinen Rückgabewert abgeben.
    Gibt es da eine Möglichkeit?

    Danke

    Leave a comment:

Working...
X