Anzeige:
Ergebnis 1 bis 9 von 9

Thema: __construct() in Vererbter Klasse

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.12.2002
    Ort
    Maria Thann
    Beiträge
    176

    __construct() in Vererbter Klasse

    Ja ich weis, ich frag hier Löcher.
    Aber wie macht man das mit der __construct() funktion
    wenn man Klassen erbt. Dann ist die Funktion ja 2 mal
    vorhanden und schließt die 1. ja aus.

    Nicht das einer denkt ich bekomme Geld dafür
    dass ich Gaert hier so viel frage ;-)

    Torsten.E

    PHP-Code:
    class adressen {

        var 
    $Name;

        function 
    adressen() {
            
    // PHP4
            
    $this->__construct();
        }

        function 
    __construct() {
           
    // PHP5
           
    $this->$Name "Torsten.E";
        }

    ........

    class 
    kunden extends adressen {

           var 
    $KdNr;

           function 
    kunden() {
               
    // PHP4
               
    $this->__construct();
           }

           function 
    __construct() {
              
    // PHP5
              
    $this->KdNr "123";
            }

    .............. 

  2. #2
    Registrierter Benutzer Avatar von sixfriends
    Registriert seit
    26.03.2003
    Ort
    /home/sixfriends
    Beiträge
    285
    Habs nicht getestet, aber:
    PHP-Code:
    parent::__construct(); 
    .
    Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten.

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.12.2002
    Ort
    Maria Thann
    Beiträge
    176

    glaub nicht parent

    Ich will ja keine Parent Funktion aufrufen.

    Schau das Beispiel an, es werden unterschiedliche Variablen
    initialisiert, da ja die vererbte Klasse eine neue Variable "$KdNr"
    hat.

    Torsten.E

  4. #4
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Hallo,

    mit PHP 5 würdest du den Konstruktor der Klasse von der du erbst mit

    parent::__construct()

    aufrufen

    In PHP 4 gibt es derartiges parent noch nicht (glaube mich zu erinnern), deshalb müsstest du dir in deinem Beispiel mit:
    PHP-Code:
    class kunden extends adressen {

           var 
    $KdNr;

           function 
    kunden() {
               
    // PHP4
               
    $this->__construct();
           }

           function 
    __construct() {
              
    // PHP5
              // Parent Konstruktor für PHP4:
              
    $this->adressen();
              
    // Parent Konstruktor für PHP5:
              //parent::__construct();

              
    $this->KdNr "123";
            } 
    aufrufen...

    Da hat sich bei PHP5 halt einiges geändert...


  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Der Konstruktor wird bei einer Vererbung doch ohnehin angesprochen.
    Zudem hast du hier etwas misch masch. Der Compiler müste bei der Methoden definition ohne ende Meckern

    PHP-Code:
    class vater
    {
        protected 
    $Daddy;

        function 
    __construct()
        {
            
    $this->Daddy "Vater";
        }

        protected function 
    zurueck($in)
        {
            if (
    $in == $this->Daddy)
                return 
    $this->Daddy;
        }

        function 
    __destruct()
        {
            
    $this->Daddy "";
        }
    }

    class 
    tochter extends vater
    {
        public 
    $Name;

        function 
    __construct() 
        {
                   
    $this->Name "Vater";
        }

        public function 
    test()
        {
            return 
    parent::zurueck($this->Name);
        }

    }
    //end 
    http://www.php.net/zend-engine-2.php

  6. #6
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Das Mischmasch ist beabsichtigt - ich gehe davon aus, dass er PHP4 verwendet - bei PHP 4 lautet der Kunstrukor "klassenname()" - um das ganze auch mit PHP 5 kompatibel zu halten musst du die komplette Konstruktorfunktionalität in __construct() auslagern, da der PHP4 Konstruktor in PHP5 ja nicht mehr ausgeführt wird. Damit das ganze dann unter PHP4 funktioniert rufst du daher den PHP5 Konstruktor aus dem PHP4 Konstruktor auf.
    Der Konstruktor der Vaterklasse wird AFAIK nie automatisch aufgerufen.

    Siehe auch:
    http://zend.com/php5/articles/engine2-php5-changes.php
    http://zend.com/php5/articles/engine2-php-oo.php
    Geändert von Gaert (22-04-2004 um 21:09 Uhr)


  7. #7
    Registrierter Benutzer Avatar von sixfriends
    Registriert seit
    26.03.2003
    Ort
    /home/sixfriends
    Beiträge
    285
    parent:: existiert auch in PHP4 (steht auch so im Manual auf php.net)
    Aufrufe der Konstruktoren in PHP4:
    Wenn keiner in der erbenden Klasse existiert: der der vererbenden Klasse, ansonsten: nur der Konstruktor der erbenden Klasse
    Weitere Infos: http://www.php.net/manual/de/languag...onstructor.php

    Im übrigen funktioniert das ganze so wie beschrieben.
    Wenn ich eine Variable in der vererbenden Klasse definiere, existiert diese auch in der erbenden. Und wenn ich mit der erbenden Klasse den Parent Konstruktor aufrufe, ist das so, als würde der Parent Konstruktor in der erbenden Klasse stehen (Das ist schliesslich auch der Sinn von Vererbung). Kann man auch ganz leicht mit folgendem Codeschnipsel testen:
    PHP-Code:
    <?php
    class adressen {
        var 
    $Name;

        function 
    adressen() {
            
    // PHP4
            
    $this->__construct();
        }

        function 
    __construct() {
           
    // PHP5
           
    $this->Name "Torsten.E";
        }
    }

    class 
    kunden extends adressen {
           var 
    $KdNr;

           function 
    kunden() {
               
    // PHP4
               
    $this->__construct();
           }

           function 
    __construct() {
              
    // PHP5
              
    parent::__construct();
              
    $this->KdNr "123";
            }
    }
    $test = new kunden();
    echo  
    $test->Name;
    ?>
    btw: $this->$Name = kommt nicht so gut.
    [EDIT]... und ausserdem hat die vererbte Klasse eine neue Variable "Name" [/EDIT]
    sixfriends
    Geändert von sixfriends (23-04-2004 um 00:43 Uhr)
    .
    Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten.

  8. #8
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Original geschrieben von sixfriends
    parent:: existiert auch in PHP4 (steht auch so im Manual auf php.net)
    Aufrufe der Konstruktoren in PHP4
    Ok, da hast du mich erwischt - ich hab die letzte Zeit zu viel mit PHP5 gemacht und leugne schon die PHP4 Funktionalität

    Original geschrieben von sixfriends
    Im übrigen funktioniert das ganze so wie beschrieben.
    Wenn ich eine Variable in der vererbenden Klasse definiere, existiert diese auch in der erbenden. Und wenn ich mit der erbenden Klasse den Parent Konstruktor aufrufe, ist das so, als würde der Parent Konstruktor in der erbenden Klasse stehen (Das ist schliesslich auch der Sinn von Vererbung).
    Das hat ja auch niemand bezweifelt, oder?


    Original geschrieben von sixfriends
    btw: $this->$Name = kommt nicht so gut.
    Stimmt...

    Original geschrieben von sixfriends
    [EDIT]... und ausserdem hat die vererbte Klasse eine neue Variable "Name" [/EDIT]
    Verstehe nicht ganz was du meinst - die Variable Name existiert nur in der Klasse von der vererbt wird.

    Gruß,

    Gaert


  9. #9
    Registrierter Benutzer Avatar von sixfriends
    Registriert seit
    26.03.2003
    Ort
    /home/sixfriends
    Beiträge
    285
    Original geschrieben von Gaert
    die Variable Name existiert nur in der Klasse von der vererbt wird.
    bezog sich auf folgendes:
    Orginal geschrieben von Thorsten.E
    da ja die vererbte Klasse eine neue Variable "$KdNr"
    hat.
    Im übrigen ist für mich die vererbte Klasse das selbe wie die Klasse, von der vererbt wird (noch nicht ganz wach gewesen?? )
    Geändert von sixfriends (23-04-2004 um 15:26 Uhr)
    .
    Wenn die Sonne der Kultur niedrig steht, werfen selbst Zwerge einen Schatten.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •