Vererbung von Eigenschaften

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

  • Vererbung von Eigenschaften

    Hallo.

    Es muss doch möglich sein Eigenschaften an eine untergeordnete Klasse zu vererben. Hier ein Beispiel:

    PHP-Code:
    <?

    class eins {
        
        public $text;

        function textSet ($text) {
            $this -> text = $text;
        }
        
    }

    class zwei extends eins {
        
        function textDisplay () {
            echo $this -> text;
        }

    }

    ?>

    // Aufruf
    $zwei = new zwei;
    $zwei -> textSet (123);
    $zwei -> textDisplay ();
    Die Eigenschaft wird nicht vererbt, diese kann zwar gesetzt, aber in der Unterklasse nicht angezeigt werden. Mit folgendem Aufruf kann man sie anzeigen lassen:

    PHP-Code:
    <?

    $zwei = new zwei;
    $zwei = textSet (123);
    echo $zwei -> text;

    ?>
    Kann mir jemand bitte helfen die Eigenschaft text aus der Klasse eins auch in der Klasse zwei nicht nur verändern, sondern auch anzeigen zu lassen.

  • #2
    ich kann dein problem nicht nachvollziehen - dein erstes beispiel funktioniert bestens.

    Kommentar


    • #3
      mach mal eine kleine korrektur:
      PHP-Code:
          function textDisplay () {
              return 
      $this -> text;
          } 
      und beim aufruf:
      PHP-Code:
      echo $zwei -> textDisplay (); 
      die echos gehen m.w. in nicht-statischen methoden unter.

      Kommentar


      • #4
        Okay, das Problem ist geklärt. Ich musste feststellen, dass nur im Konstruktor der Klasse die Eigenschaften aus Klasse eins nicht verfügbar sind. Keine Ahnung warum, aber es ist so. Trotzdem danke

        Kommentar


        • #5
          Ich dachte eigentlich, dass der einzigste Unterschied zwischen normalen Methoden und Konstruktor-Methoden ist, dass die Konstruktor-Methode beim Initialisieren der Klasse aufgerufen wird. Gibt es noch weitere Unterschiede, als dass dort die vererbten Eigenschaften der Eltern-Klasse nicht verfügbar sind?

          Kommentar


          • #6
            das stimmt so nicht. die eigenschaften muessen im konstruktor genau so verfuegbar sein.

            hast du mal versucht, am anfang den parent-konstruktor explizit aufzurufen?

            Kommentar


            • #7
              klar kannst du auf die eigenschaft zugreifen, nur ist text zu diesem zeitpunkt null, da ja textSet() noch nicht aufgerufen wurde.
              public function __construct(){var_dump($this->text);}

              edit: ; vergessen
              Zuletzt geändert von 3DMax; 03.11.2006, 22:11.

              Kommentar


              • #8
                Hi,

                Ein wichtiger Unterschied zwischen Konstruktoren und Methoden ist, dass K keine Rückgabewerte haben können.

                Eigenschaften sollten grundsätzlich private sein, da du vererben möchtest, solltest du protected wählen, wenn du die Eigenschaften/Methoden vererben möchtest.

                Gruß Thomas

                Kommentar


                • #9
                  Original geschrieben von Alrik
                  Ein wichtiger Unterschied zwischen Konstruktoren und Methoden ist, dass K keine Rückgabewerte haben können.
                  Na ja, sie haben ja implizit einen - das Objekt.

                  Wär' ja blöd, wenn man eigene Variablen zurückgeben könnte oder würde - dann wäre
                  $blubb = new blah();
                  ja ziemlich sinnfrei, wenn man aus dem Konstruktor 5 oder "xyz" zurückgeben würde :-)
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar

                  Lädt...
                  X