1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

(PHP) Eigenschaften in Kindklasse übernehmen

Dieses Thema im Forum "PHP & Co." wurde erstellt von _linx_, 18.07.09.

  1. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Hab da so ein kleines Problem mit PHP-Klassen:

    Code:
    <?php
        class Eltern {
            protected $var;
            public function __construct($param) {
                $this->var = $param;
            }
        }
        
        class Kind extends Eltern {
            public function __construct() {
                echo $this->var;
            }
        }
        $Eltern = new Eltern('param...');
        $Kind = new Kind;
    ?>
    Leider kommt da immer NULL als Ergebniss. Ich habe bereits versucht, in Kind das __construct wegzulassen und seperat (als Methode "construct") aufzurufen, aber da vermisst er das Argument für Eltern. Das Problem ist, dass ich nicht immer den Parameter für Eltern noch mitgeben will.

    Gibt es da eine Möglichkeit, dass zu umgehen? Ich habe bereits ein existierendes $Eltern. Kann man das irgendwie referenzieren, dass existierende Variablen von $Eltern direkt in $Kind übernommen werden?

    edit: Eigentlich müsste ich $Eltern in $Kind klonen und dann die Eigenschaften/Methoden von der Klasse Kind dran hängen. Ist das möglich?

    edit2: Für was ist der "Modifikator" =& eigentlich gedacht?
    edit 3: =& ist Referenzieren ($a=10; $b =& $a; $a=20; $b==20)
    Und für was ist nun &=?
     
    #1 _linx_, 18.07.09
    Zuletzt bearbeitet: 18.07.09
  2. dakingno1

    dakingno1 Cripps Pink

    Dabei seit:
    31.10.07
    Beiträge:
    149
    die Klassenvariable $vaar muss als protected deklariert werden..

    Eigentlich müsstest du nen Fehelör bekommen....
     
  3. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    Logisch. Du erzeugst ja auch zwei unterschiedliche Instanzen.

    Was genau möchtest du denn erreichen?
     
  4. dakingno1

    dakingno1 Cripps Pink

    Dabei seit:
    31.10.07
    Beiträge:
    149
    lol, jetzt seh ich es erst.

    Er hat natürlich recht. hab nicht genau geschaut
     
  5. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Sry, mein Fehler. Ist als protected, habs nur falsch geschrieben.

    Ich möchte, dass ich in der Kindklasse bereits definierte Variablen der Elternklasse auch nutzen kann. Dann kann ich z.B. folgende Ablauf erreichen: Kindklasse 1 <-> Kindklasse 2. Und das ohne dass sich die beiden Kindklassen kennen müssen. Ergibt am Schluss so ne Art Pluginsystem.

    Edit: Im Prinzip ist also die Kindklasse ein abgeleiteter Klon der Elternklasse.
     
    #5 _linx_, 18.07.09
    Zuletzt bearbeitet: 18.07.09
  6. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    *push*
     
  7. naich

    naich Pommerscher Krummstiel

    Dabei seit:
    22.11.08
    Beiträge:
    3.059
    Das klingt so, dass das eine Static Variable sein soll?? Also nicht extra für jede Klasse diese Variable, sondern 1 x für die Klasse und alle abgeleiteten Objekte:
    Was soll das bedeuten?:
     
  8. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Eine statische Variable löst das Problem ja auch nicht. Die kann man nicht mehr verändern…

    Die Kindklasse soll gleichzeitig ein Klon der Elternklasse sein und ihre eigenen Methoden einbringen können.
     
  9. naich

    naich Pommerscher Krummstiel

    Dabei seit:
    22.11.08
    Beiträge:
    3.059
    Natürlich kann man die verändern! Konstanten definierst du anders! Ne statische Variable ist dazu da, Informationen bereitzustellen, welche unabhängig von den einzelnen Objekten der Klasse ist. Bsp. z.B. hier.

    Das ist das Grundprinzip der Vererbung, also erklärt immer noch nicht genau dein Anliegen. Versuch es bitte nochmal besser auszudrücken, ich habe es immer noch nicht genau verstanden.

    Edit: so, nach nochmaligen durchlesen meine ich dein Anliegen verstanden zu haben:
    Das die Variable $var auch in der Kind-Klasse existiert sollte klar sein, das ist ja das Grundprinzip der Vererbung. Nun willst du sicher nicht den Konstruktor von Eltern nochmal in Kind implementieren - musst du auch nicht, der wird ja mit vererbt. Obiger Code funzt. Viell. lags auch daran, wenn du Kind so
    erstellst, wird natürlich die Variable var gar nicht belegt.

    Edit 2: Was mir grad aufgefallen ist: Entferne ja nicht die Kommentare beim zweiten __construct. Wenn du eine __construct ohne Parameter hast, nimmt er immer die, auch wenn du dem Objekt bei der Instanziierung Werte mitgibst (Obwohl nach dem Overloading-Konzept von OOP eigentlich die richtige __construct ausgewählt werden sollte? Oder gilt das bei Konstruktoren nicht?)
     
    #9 naich, 19.07.09
    Zuletzt bearbeitet: 19.07.09
  10. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Würde das Problem eigentlich lösen. Ich spiel mal kurz damit rum, und schreib dann mal mein Ergebniss hier.
    Vererbung ist das übernehmen von Methoden und Eigenschaften im Ursprungszustand. Ein Klon ist eine Kopie, die sich mit der Ursprungsklasse verändert.
    Bsp:

    Klasse A ( $var )
    Klasse B extends Klasse A

    In Klasse B habe ich nun $var zur Verfügung, aber wenn ich in der Instanz von Klasse A $var ändere, bleibt der Wert in Klasse B gleich.

    Klasse A ( $var )
    Klasse B = clon Klasse A

    Wenn ich nun in Klasse A den Wert verändere, ist der Wert in Klasse B gleich dem neuen Wert in Klasse A. Das ganze funktioniert auch umgekehrt.
     
  11. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    So, nun meine Ergebnisse (übersichtshalber in einem neuen Post):

    Das mit den statischen Variablen löst tatsächlich das Problem. Jedenfalls teilweise. Hätte ich auch selber drauf kommen können. Das verbleibende Problem lässt sich aber durch umprogrammieren lösen. Freut mich.

    Wieso liegt eigentlich die Lösung immer so nahe? Und wieso übersieht man die einfachste Lösung einfach immer?
     
  12. naich

    naich Pommerscher Krummstiel

    Dabei seit:
    22.11.08
    Beiträge:
    3.059
    Aha, ich kenne den Begriff Clon nur als (dann eigenständige) Kopie eines Objektes. Dass dabei Variablen mit "syncronisiert" werden sollen, wobei sich die Methoden in den 2 Klassen scheinbar unterscheiden sollen, ist mir neu.
    In welcher Sprache ist denn dieses Konzept so implementiert, wie du es beschrieben hast? Oder ist das nur durch so nen Rumgemache wie den static-Variablen möglich??
     
  13. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Das ist ja jetzt PHP, und ich kenne auch nur diese Sprache so gut. JavaScript ein wenig, aber das kann man nicht wirklich Sprache nennen.

    Bei einem Klon in PHP unterscheiden sich die Methoden allerdings nicht. Ein geklontes Objekt ist eigentlich nur ein Alias für ein anderes Objekt. Meine Idee/Mein Wunsch war allerdings, dass ich einen Klon um Methoden erweitern kann, was allerdings nicht direkt möglich ist, sondern via static-Variablen/Methoden ähnlich umgesetzt werden kann.
     

Diese Seite empfehlen