Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Klassenobjekt in Methode verwenden

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Klassenobjekt in Methode verwenden

    Ich habe ein neuen Objekt erstellt und möchte in einer Methode eben darauf zugreifen. Klappt aber irgendwie nicht.
    Gibt es da ein besonderes Sprachkonstrukt?

    PHP-Code:
    $myObj = new ClassObj();

    class 
    ClassObj {
     var 
    $dies;
     var 
    $jenes
     
     
    function () {
     return 
    $myObj->dies;
     }


  • #2
    PHP-Code:
    myObj = new ClassObj();

    class {
     var 
    $dies;
     var 
    $jenes
     
     
    function { 
    Da fehlt der halbe Code !

    So:
    PHP-Code:

    class ClassObj{
      public 
    $dies;
      public 
    $jenes 'Bob';
     
      public function 
    tuEtwas{
    echo 
    'WAAAA';
    }

    public function 
    tuWasAnderes() {
    return 
    $this->dies;
    }
    }

    $myObj = new ClassObj();

    $myObj->tuEtwas();

    $hans $myObj->jenes
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

    Kommentar


    • #3
      Zitat von ByStones Beitrag anzeigen
      [Da fehlt der halbe Code !
      Nicht mehr,
      iwie war der browser schneller als ich

      Kommentar


      • #4
        PHP-Code:
        function () {
         return 
        $myObj->dies;
         } 
        Ist eine anonyme Funktion und macht in einer Klasse (so wies du machst) keinen Sinn, sieh oben mein Beispiel an und zieh Google/Manual zu rate ^^
        Signatur:
        PHP-Code:
        $s '0048656c6c6f20576f726c64';
        while(
        $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

        Kommentar


        • #5
          Klint für mich nach Dependency Injection.

          Kommentar


          • #6
            Zitat von haemoglobin Beitrag anzeigen
            Klint für mich nach Dependency Injection.
            Dann siehst du einen anderen Thread als ich

            Für mich klingt das nach "Keine Ahnung von Klassen und Methoden und sei es nur dass beide einen Namen brauchen."

            Ein evtl brauchbarer Tipp: Verwende $this.

            Und dann bitte etwas mit Objektorientierung (in PHP und allgemein) vertraut machen, siehe Grundlagen
            [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
            [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

            Kommentar


            • #7
              Der Code zeigt vor allem, dass das Wissen um den Geltungsbereich von Variablen nicht vorhanden ist - also bitte hier nachlesen: http://www.php.net/manual/en/languag...bles.scope.php
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Hmm, ooops.
                Sollte keine anonyme Funktion sein.
                richtig:
                PHP-Code:
                $myObj = new ClassObj();
                $otherObj = new ClassObj();

                $var $otherObj->tuWas();

                class 
                ClassObj {
                 var 
                $dies;
                 var 
                $jenes
                 
                 
                function tuWas() {
                 return 
                $myObj->dies;
                 }

                Ich möchte also schon in einer Methode (function innerhalb der Klassendefinition auf ein Klassenelement) zugreifen.

                Kommentar


                • #9
                  Zitat von carsten Beitrag anzeigen
                  richtig:
                  ähm... nein.

                  Zitat von carsten Beitrag anzeigen
                  Ich möchte also schon in einer Methode (function innerhalb der Klassendefinition auf ein Klassenelement) zugreifen.
                  Du möchtest der Klasse einen Namen geben, $this verwenden und den Link von ChrisB lesen.
                  [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                  [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                  Kommentar


                  • #10
                    Zitat von fab Beitrag anzeigen
                    Du möchtest der Klasse einen Namen geben, $this verwenden und den Link von ChrisB lesen.
                    Nein,
                    mit $this nehme ich ja Bezug auf $myObj in der Funktion.
                    Ich möchte die Methode aber auf $otherObj anwenden.
                    Bei den links habe ich reingeschaut, aber dazu leider nichts gefunden.

                    Kommentar


                    • #11
                      Derartiges geht aus Deinem Code nicht hervor. Scheint mir auch ziemlicher Unsinn zu sein.
                      [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


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        Derartiges geht aus Deinem Code nicht hervor.
                        PHP-Code:
                        $myObj = new ClassObj();
                        $otherObj = new ClassObj();

                        $var $otherObj->tuWas();

                        class {
                         var 
                        $dies;
                         var 
                        $jenes
                         
                         
                        function tuWas() {
                         return 
                        $myObj->dies;
                         }

                        imho schon.
                        Ich rufe die Methode mit $otherObj auf
                        und möchte in der Berechnung dazu $myObj->dies verwenden.


                        Scheint mir auch ziemlicher Unsinn zu sein.
                        Warum ist das Unsinn?

                        Kommentar


                        • #13
                          Die Klasse stellt den Bauplan für alle instanziierten Objekte dar. Du kannst darin nicht unter verschiedenen Instanzen unterscheiden. Das kann schon gar nicht funktionieren, weil
                          - die Klasse die Variable nicht kennt
                          - die Methode die Variable nicht kennt
                          - der Variablenname nichts über den Typ oder Status eines Objekts aussagt

                          Wenn Du eine konkrete Instanz ansprechen willst, musst Du die auch dem entspr. Kontext als Variable bereitstellen.
                          [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


                          • #14
                            Woher soll denn deine Klasse wissen was
                            PHP-Code:
                            $myObj 
                            ist?
                            Vielleicht ist dir der Unterschied zwischen einer Klasse und einem Objekt unklar?

                            Kommentar


                            • #15
                              Zitat von nikosch Beitrag anzeigen
                              Wenn Du eine konkrete Instanz ansprechen willst, musst Du die auch dem entspr. Kontext als Variable bereitstellen.
                              Das wird nur schwer, wenn sich die Instanz erst während der Methode ergibt.

                              Um es mal mit einem Beispiel zu verdeutlichen:
                              Nehmen wir 'Rezepte'

                              Ich habe die Klasse 'Rezepte'
                              Ich habe die Eigenschaft Zutaten
                              Ich habe die Eigenschaft Herkunft
                              Ich habe Objekte

                              Dem Objekt $Kuchen weise ich die Zutaten Butter, Eier,Mehl zu
                              -die Herkunft Backstube zu
                              Dem Objekt $Butter weise ich die Zutaten Milch zu
                              -die Herkunft Viehstall
                              Dem Objekt $Mehl weise ich die Zutaten Getreide zu
                              -die Herkunft Acker
                              Dem Objekt $Eier weise ich zu, das es einfach nur ein Ei ist.
                              -die Herkunft Viehstall zu

                              Wenn ich jetzt wissen will, wo die Sachen für den Kuchen herkommen erstelle ich zunächst eine Methode, die mir die Zutaten für ein Objekt raussucht. Das ist
                              $var = $Kuchen->Zutaten();
                              function Zutaten() {
                              $liste = $this->Zutaten;
                              }


                              Dort finde ich jetzt Butter, Eier, Mehl; auch alles Objekte in der Klasse.
                              Ich möchte aber eigentlich nicht die Liste der Zutaten haben, sondern eine Liste der Herkunftsorte.
                              Das wollte ich mit
                              function Zutaten() {
                              $liste = $this->Zutaten;
                              $output = $$liste->Herkunft;
                              }

                              lösen. Klappt aber leider nicht.
                              Deswegen habe ich nachgefragt, ob es dafür eine besondere Syntax gibt.
                              [btw, dass es nicht immer nur eine Zutat ist, ist klar und ist entsprechen gelöst]

                              Kommentar

                              Lädt...
                              X