Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP OOP auf Parent zugreifen

Einklappen

Neue Werbung 2019

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

  • PHP OOP auf Parent zugreifen

    Hallo,

    mal ne simple frage,
    wie kann ich bei dem Beispiel das so machen, das ich den Wert X ausgegeben bekomme? Also den Wert einer bereits instanzierten Klasse?

    PHP-Code:
    class A
    {
        protected 
    $var;

        public function 
    __construct($x) {
            
    $this->var $x;
        }
    }

    class 
    extends 
    {
        public function 
    __construct() {
            echo 
    $this->var;
        }

    }

    $
    A(5345);
    $
    B(); 

  • #2
    PHP-Code:
    $1->var 
    ? Wobei $1 natürlich ein ungültiger Variablenname ist.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Das ist kein korrektes PHP. Weiterhin: $a und $b sind zwei verschiedene Instanzen, also wirst du auch niemals von $b auf die protected variablen von $a zugreifen können.
      [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

      Kommentar


      • #4
        $1 und $2 waren jetzt nur weil ich nicht wieder A und B verwenden wollte.

        Also geht es nicht, ohne das ich Objekt $1 an $2 übergebe? Wenn ich von protected auf public umstelle komm ich dann dadran?

        Kommentar


        • #5
          Was auch immer du damit vorhast, ich vermute du solltest dich nochmal mit der Idee und der Umsetzung von OOP auseinandersetzen, sonst endet das noch in einer Katastrophe, wenn du schon solche Fragen stellen musst.

          Klickstuhier
          [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

          Kommentar


          • #6
            Du verstehst die Vererbung nicht. B erbt von A, das bedeutet wenn du ein B erstellst kannst du auf die Vaterklasse A zugreifen. Das bedeutet aber nicht, dass du Vaterklasse und Kindklasse einzeln Instanzieren musst!
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              In C++ wurde mir begebracht das wenn man eine child Klasse hat, diese auf Protected Variablen der Elternklasse zugreifen kann.



              ----------------------
              Ah danke. Das mit dem einzelnen Instanzieren war der Fehler den ich nicht vor augen hatte

              Kommentar


              • #8
                Hallöchen,

                Zitat von Nagazi Beitrag anzeigen
                $1 und $2 waren jetzt nur weil ich nicht wieder A und B verwenden wollte.


                Zitat von Nagazi Beitrag anzeigen
                Also geht es nicht, ohne das ich Objekt $1 an $2 übergebe? Wenn ich von protected auf public umstelle komm ich dann dadran?
                Wenn es tatsächlich notwendig ist, von extern auf den Wert dieser Variablen zuzugreifen, solltest du in Erwägung ziehen, Setter zu implementieren.

                PHP-Code:
                class A{
                    protected 
                $value;

                    public function 
                __construct($value){
                        
                $this->value $value;
                    }

                    public function 
                getValue(){
                        return 
                $this->value;
                    }
                }

                class 
                B{
                    public 
                __construct(A $a){
                        echo 
                $a->getValue();
                    }
                }

                $a = new A;
                $b = new B($a); 
                Zitat von Nagazi Beitrag anzeigen
                In C++ wurde mir begebracht das wenn man eine child Klasse hat, diese auf Protected Variablen der Elternklasse zugreifen kann.
                Das funktioniert allerdings nur innerhalb der jeweiligen Instanz.

                Edit: Ok, haste schon bemerkt

                Viele Grüße,
                lotti
                [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                Kommentar


                • #9
                  Wenn du aus dem C++-Umfeld kommst: Methoden in PHP sind vergleichbar mit virtual-Klassenfunktionen in C++.
                  [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                  Kommentar


                  • #10
                    Ist ewig her das ich mit Klassenvererbung mal was programmiert habe. Habe nicht vorgehabt die Variablen Public zu machen.

                    Ich schriebe grade eine Klasse um HMTL Code zu erzeugen, und etliche Werte dafür kommen aus einer darüberliegenden Klasse, da kam bei mir jetzt grad ein wenig verwirrung auf

                    Kommentar


                    • #11
                      Zitat von tkausl Beitrag anzeigen
                      Du verstehst die Vererbung nicht. B erbt von A, das bedeutet wenn du ein B erstellst kannst du auf die Vaterklasse A zugreifen. Das bedeutet aber nicht, dass du Vaterklasse und Kindklasse einzeln Instanzieren musst!
                      PHP-Code:
                      class A
                      {
                          protected 
                      $var;

                          public function 
                      __construct($x) {
                              
                      $this->var $x;
                          }
                      }

                      class 
                      extends 
                      {
                          public function 
                      getParentVar() {
                              echo 
                      $this->var;  //aus A!
                          
                      }

                      }

                      $b = new b(5345);
                      echo 
                      $b->getParentVar();  //Ausgabe 5345 
                      Edit:
                      Stark vereinfachte Umschreibung für eine Vererbung:
                      Stell dir vor, anstelle von "extends A " steht in B ein include mit dem Inhalt der Klasse A.

                      Kommentar


                      • #12
                        Zitat von lottikarotti Beitrag anzeigen
                        Das funktioniert allerdings nur innerhalb der jeweiligen Instanz.
                        Nein, das funktioniert auch über Instanzen hinweg...

                        PHP-Code:
                        class {
                            private 
                        $t;

                            public function 
                        __construct($t) {
                                
                        $this->$t;
                            }

                            public function 
                        foo(k $k) {
                                
                        var_dump($k->t);
                            }
                        }

                        $a = new k(1);
                        $b = new k(2);


                        $a->foo($b); //ergibt 2 

                        Kommentar


                        • #13
                          Wobei hier zwei Instanzen vorhanden sind. Ohne explizit b die Instanz a zu übergeben wirst du von b nie zu a kommen. Die Aussage "nur innerhalb der jeweiligen Instanz" ist somit korrekt.
                          [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                          Kommentar


                          • #14
                            Zitat von Nagazi Beitrag anzeigen
                            wie kann ich bei dem Beispiel das so machen, das ich den Wert X ausgegeben bekomme? Also den Wert einer bereits instanzierten Klasse?
                            Nach nochmaligen Lesen suchst du womöglich auch nur static:
                            PHP-Code:
                            class A
                            {
                                protected static 
                            $var;

                                public function 
                            __construct($x) {
                                    
                            self::$var $x;
                                }
                            }

                            class 
                            extends 
                            {
                              public function 
                            __construct() {
                                echo 
                            parent::$var;
                              }
                            }

                            $a = new A(5345);
                            $b = new B;  //Ausgabe: 5345 

                            Kommentar

                            Lädt...
                            X