Ankündigung

Einklappen
Keine Ankündigung bisher.

Sinn und Zweck der Set und Get Methoden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sinn und Zweck der Set und Get Methoden

    Hallo,

    ich bin grade fleißig am PHP - OOP lernen und habe auch schon recht viel verstanden, jedoch verstehe ich den Sinn der Get und Set Funktionen nicht ganz

    Kann mir den jemand für "extraschlaue" Menschen erklären?

    Wäre sehr dankbar!

    lg
    Kevin

  • #2
    Eines der Hauptmerkmale von OO ist es, dass Objekte ihre Daten „kapseln“, so dass nicht von überall außerhalb darauf zugegriffen werden kann.

    Getter und Setter erlauben nun von außerhalb trotzdem Zugriff auf die Daten - aber so, dass das Objekt selber Kontrolle darüber hat, welche Daten es herausgibt, und vor allem welche Daten es akzeptiert.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Zudem kannst Du intern die Daten anders speichern. Das Objekt fungiert als Blackbox. Bei $foo->myProperty weißt Du die interne Beschaffenheit (magic methods mal außen vor gelassen), bei $foo->setMyProperty () nicht mehr. myProperty könnte hier in einem Array gespeichert sein, in einem Unterobjekt, aufgeteilt auf mehrere Variablen o.ä. Bei Gettern kann ein Wert bspw. auch erzeugt werden. Klassisches Beispiel:

      Code:
      Person
        function setDateOfBirth ();
        function getDateOfBirth ();
        function getAge ();
      Logischerweise muss hier das Alter nicht mehr gespeichert/gesetzt werden, es kann aus dem Geburtsdatum ja abgleeitet werden. Genauso kann setDateOfBirth hier das Datum intern als Timestam ablegen oder in Jahr, Monat und Tag aufgetrennt als Array speichern oder noch ganz anders.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Das verstehe ich auch nicht so ganz. Was ist der Unterschied zwischen
        PHP-Code:
        echo $bla->blub
        und
        PHP-Code:
        echo $bla->getBlub(); 
        ? Bei Settern werden die Daten oft noch validiert, man bestimmt was gesetzt werden soll und was nicht. Da sehe ich nen Sinn.
        PHP-Code:
        echo "Hello World"

        Kommentar


        • #5
          Das verstehe ich auch nicht so ganz.
          Dann würde ich mal die anderen Posting lesen, besonders den von nikosch.
          Signatur:
          PHP-Code:
          $s '0048656c6c6f20576f726c64';
          while(
          $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

          Kommentar


          • #6
            Was ist der Unterschied zwischen
            Das habe ich doch gerade beschrieben ?!. Bei $bla->blub muss auch definitiv eine Property blub in blaClass existieren. Bei einem Getter nicht.
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              Zitat von $gast Beitrag anzeigen
              Das verstehe ich auch nicht so ganz. Was ist der Unterschied zwischen
              PHP-Code:
              echo $bla->blub
              und
              PHP-Code:
              echo $bla->getBlub(); 
              Wenn ersteres erlaubt/möglich sein soll - dann wäre idR. auch ein Setzen des Wertes von außerhalb möglich, weil es in den meisten Programmiersprachen nicht implementiert ist, dass an so einer Stelle zwischen lesendem und schreibendem Zugriff noch mal extra unterschieden wird.

              Also erfordert eine Eigenschaft, auf die von außen nicht (schreibend) zugegriffen werden soll, neben einem Setter auch noch einen Getter.
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Ich hab dann auch mal eine Frage in die Richtung:
                Was findet Ihr besser/wo sind die Vorteile von:

                "Normalen" Settern/Gettern:
                PHP-Code:
                $obj->getDate();
                $obj->setDate(time()); 
                und dem ganzen im Stil von jQuery:
                PHP-Code:
                $obj->date(); //Getter
                $obj->date(time()); //Setter 
                Grüße
                Signatur:
                PHP-Code:
                $s '0048656c6c6f20576f726c64';
                while(
                $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

                Kommentar


                • #9
                  Wesentlicher Vorteil bei Kapselung ist Wartbarkeit

                  Wenn man eine Klasse hat, sollte die wiederverwendbar sein. Daher ist es sinnvoll Variablen als privat zu deklarieren und über getter und setter Erreichbar zu machen.

                  Selbst wenn dein setter extrem simpel ist:

                  publig setGewuenschteAnzahl($var) {
                  $GewuenschteAnzahl = $var;
                  }

                  Macht das im Sinne der Wiederverwertung einigen Unterschied. Stell dir vor, dass oben wäre eine Funktion aus einem Bestellformular und in der Klasse, die nachschaut ob genug Zeug auf Lager (in der Datenbank) ist, gibt es die private Variable $GewuenschteAnzahl.

                  Zum Zeitpunkt der Klassenerstellung hast du einen kleinen Webshop und bist froh über jede Bestellung. Dann geht dein Laden durch die Decke, inzwischen hast du weitere Klassen geschrieben, die auf diese Setter Methode zugreifen, sogar einige APIs für Drittanbieter, die wiederum einige Klassen geschrieben haben.

                  Jetzt wollen soviele Leute bei dir bestellen, dass du sagen musst: Sorry, mehr als 10 geht nicht.

                  Jetzt änderst du einfach deine SetterMethode:

                  public setGewuenschteAnzahl($var) {
                  if($var < 10) {
                  $var = 10;
                  }
                  $GewuenschteAnzahl = $var;
                  }

                  Damit brauchen die anderen Klassen, die APIs und die Klassen von Drittanbietern nicht geändert werden.

                  Und wenn du setter Methoden verwendest, solltest du die eigentliche $GewuenschteAnzahl auf jeden Fall auch kapseln, damit niemand direkt darauf zugreift, sondern nur über den Setter. Wenn du dass hast, dann brauchst du auch einen Getter (der Grund von nikosch kommt noch dazu)

                  Kommentar


                  • #10
                    Besser ist, was kompatibler ist. Weil PHP für bestimmte Sprachelemente identische Namensräume benutzt, kommst Du schnell in Bdrängnis eines Namenskonflikts $foo->case(), $foo->for() sind solche Klassiker.
                    Zudem finde ich einheitliche Getter/Setter schöner, weil sie sich dann von den eigentlichen Methoden („Actions“ oder wie auch immer man das nennen will) unterscheiden. UND man kann einheitliche G/S automatisiert erzeugen, dokumentieren und dergleichen.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar


                    • #11
                      Wow, vielen Dank für die ganzen helfenden Beiträge!

                      Besonders shreddings letzter Beitrag hat mir endlich alles erklären können.
                      Wieder etwas nützliches und wichtiges gelernt!

                      Nochmals vielen Dank!

                      Kommentar

                      Lädt...
                      X