Jeena Paradies: (OOP) class Anlegen extends Games

Hallo,

Ich versuche folgendes in PHP 4.3:

<?php  
  
class Games {  
  
 function Games($db_table) {  
     $this->db_table = $db_table;  
     $this->ligen = $this->get_ligen();  
 }  
  
 function blah() {  
  // irgendwas  
 }  
  
}  
  
 class Anlegen extends Games {  
  
    function output_form( $data = '' ) {  
        return "blabla";  
    }  
 }  
  
// Konstruktion der beiden Objekte oder wie man da sagt  
  
 $Games = new Games(DB_TABLE);  
 $game = new Anlegen();  
  
 echo $game->output_form();  
  
?>

Allerdings glaube ich dass ich die Klassen irgendwie falsch aufrufe, denn Es kommt der Fehler:

Fatal error: Cannot instantiate non-existent class: a in /home/jeena/Webs/fussballergebnisse/admin/spiele.php on line ..(da wo  $game = new Anlegen(); steht)

Wie macht man das in PHP 4 richtig?

Grüße
Jeena Paradies

--
Nichts ist besser als Bass!
  1. Hallo,

    Halt kommando zurück!

    Ich hatte den Code ein wenig anders, und zwar so, dass die Reihenfolge im Quellcode folgende war und zwar erst $game = new Anlegen();[/php] und danach erst ein paar Zeilen später [code lang=php]class Anlegen extends Games {..usw.

    Jetzt habe ich das davor gestellt und alles funktioniert wie erwartet. Ich dachte eigentlich dass seit PHP4 die Reihenfolge im Quellcode eigentlich egal währe. Ist das doch nicht so?

    Grüße
    Jeena Paradies

    --
    Nichts ist besser als Bass!
    1. hallo Jeena,

      Halt kommando zurück!

      Komisch. Ich weiß auch, daß man manchmal erst dann (und auch genau in dem Augenblick, wenn) auf die richtige Lösung kommt, wenn man sich zwingt, das Problem als verständliche Frage zu formulieren. Haben wir ja mehrfach schon erlebt, daß ein Fragesteller nach kurzer Zeit anmerkt, er habe sein Problem doch schon lösen können.
      Aber daß DIR sowas passieren kann?
      *SCNR*

      Ich hatte den Code ein wenig anders, und zwar so, dass die Reihenfolge im Quellcode folgende war und zwar erst $game = new Anlegen(); und danach erst ein paar Zeilen später class Anlegen extends Games {..usw.

      Du erlaubst die leichte Korrektur in deinem Forums-Code ...

      Jetzt habe ich das davor gestellt und alles funktioniert wie erwartet. Ich dachte eigentlich dass seit PHP4 die Reihenfolge im Quellcode eigentlich egal wäre. Ist das doch nicht so?

      Jaein. Wenn ich das richtig lese, wolltest du _zuerst_ mit "new Anlegen" etwas (als Wert einer Variablen) aufrufen, was es noch gar nicht gibt. Die Klasse muß schon existieren, bevor du daraus etwas in eine Variable stecken kannst. Die Reihenfolge von Variablen ist wurscht, aber Klassen müssen existieren, bevor sie in Variablen verwendet werden können.

      Grüße aus Berlin

      Christoph S.

      1. Hallo,

        Aber daß DIR sowas passieren kann?
        *SCNR*

        hehe, Nichts ist unmöglich, ...

        Jaein. Wenn ich das richtig lese, wolltest du _zuerst_ mit "new Anlegen" etwas (als Wert einer Variablen) aufrufen, was es noch gar nicht gibt. Die Klasse muß schon existieren, bevor du daraus etwas in eine Variable stecken kannst. Die Reihenfolge von Variablen ist wurscht, aber Klassen müssen existieren, bevor sie in Variablen verwendet werden können.

        Ich glaube ich habe da ein echtes Verständnisproblem. Ab wann gibt es eine Klasse? Wie nennt man den Vorgang der Geburt einer Klasse während der Laufzeit?

        Grüße
        Jeena Paradies

        --
        Nichts ist besser als Bass!
      2. 你好 Christoph,

        bitte lege dir eine saubere Unterscheidung zwischen Objekt bzw. Instanz und
        Klasse zu.

        Jetzt habe ich das davor gestellt und alles funktioniert wie erwartet.
        Ich dachte eigentlich dass seit PHP4 die Reihenfolge im Quellcode
        eigentlich egal wäre. Ist das doch nicht so?

        Jaein. Wenn ich das richtig lese, wolltest du _zuerst_ mit "new Anlegen"
        etwas (als Wert einer Variablen) aufrufen, was es noch gar nicht gibt.
        Die Klasse muß schon existieren, bevor du daraus etwas in eine Variable
        stecken kannst. Die Reihenfolge von Variablen ist wurscht, aber Klassen
        müssen existieren, bevor sie in Variablen verwendet werden können.

        Du redest vermutlich vom Vorgang der Instanzierung, der Erzeugung eines
        Objekts. Und nein, eine Klasse muss theoretisch noch nicht bekannt sein
        bei der Instanzierung, da gilt eigentlich dasselbe wie bei Funktionen.
        Dummerweise scheint das aber buggy zu sein.

        再见,
        克里斯蒂安

        --
        Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
        1. hallo CK,

          bitte lege dir eine saubere Unterscheidung zwischen Objekt bzw. Instanz und Klasse zu.

          Ich glaube nicht, daß _das_ für mich ein Verständigungsproblem darstellt. Allerdings gebe ich zu, daß ich _zuerst_ Jeenas "Gelöst..."-posting gelesen und erst später mit seinem OP verglichen habe.

          Grüße aus Berlin

          Christoph S.

          1. 你好 Christoph,

            bitte lege dir eine saubere Unterscheidung zwischen Objekt bzw.
            Instanz und Klasse zu.

            Ich glaube nicht, daß _das_ für mich ein Verständigungsproblem darstellt.

            Dein Posting vermittelte sehr stark den Eindruck, dass du keine Ahnung
            hast, was der Unterschied ist. Drum bat ich auch um eine saubere
            Ausdrucksweise.

            再见,
            克里斯蒂安

            --
            Kommt ein Vektor zur Drogenberatung: "Hilfe, ich bin linear abhaengig!"
            1. hallo CK,

              ... bat ich auch um eine saubere Ausdrucksweise.

              Das geht schon in Ordnung, _das_ möchten wir ja schließlich alle.

              Grüße aus Berlin

              Christoph S.

    2. 你好 Jeena,

      Jetzt habe ich das davor gestellt und alles funktioniert wie erwartet.
      Ich dachte eigentlich dass seit PHP4 die Reihenfolge im Quellcode
      eigentlich egal währe. Ist das doch nicht so?

      Doch, es sollte so sein. Sieht nach nem Bug aus. Befrage doch mal deren
      Bugtracker.

      再见,
      克里斯蒂安

      --
      Der Verstand steht ueber allem. Was durch die Vorstellungskraft nicht geschaffen werden kann, existiert nicht.
  2. hi,

    $Games = new Games(DB_TABLE);

    warum machst Du jetzt 2 Objekte?
    $game = new Anlegen($DB_TABLE);
                       ^^^
    da fehlte auch "$".

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hallo,

      $Games = new Games(DB_TABLE);
      warum machst Du jetzt 2 Objekte?

      Weil mir nicht so klar war, dass ein Kindsobjekt ein Elternobjekt irgendwie erzeugen kann. Bei PHP4 scheint es ja sogar so, dass wenn die Kindsklasse keinen Konstruktor hat einfach der Konstruktor der Elternklasse verwendet wird, wobei mir beide vorgehensweisen irgendwie sehr komisch vorkommen.

      $game = new Anlegen($DB_TABLE);
                         ^^^
      da fehlte auch "$".

      Nein das war schon richtig so, es ist ja auch eine Konstante und keine Variable.

      Grüße
      Jeena Paradies

      --
      Nichts ist besser als Bass!
      1. 你好 Jeena,

        Bei PHP4 scheint es ja sogar so, dass wenn die Kindsklasse keinen
        Konstruktor hat einfach der Konstruktor der Elternklasse verwendet
        wird, wobei mir beide vorgehensweisen irgendwie sehr komisch vorkommen.

        Nein, das ist vollstaendig normal so. Das ist doch Sinn und Zweck von
        Vererbung. Polymorphismus und Ueberladung und so, um mal ein paar
        Google-Stichwoerter in den Raum zu werfen.

        再见,
        克里斯蒂安

        --
        Denn wer 'ne Blacklist hat, muss halt daran denken, dass er manches nicht sieht... und vor dem posten die Realitaet einschalten
        1. Hallo Christian,

          Nein, das ist vollstaendig normal so. Das ist doch Sinn und Zweck von
          Vererbung.

          Nur, das Konstruktoren normalerweise nicht vererbt werden.
          So wie das Beispiel von Jeena aussieht, hat eine Klasse wohl einen Default-Konstruktor, wenn kein anderer angegeben wird.
          Und von der Elternklasse wird in dem Fall wohl einfach der Konstruktor ohne Argumente aufgerufen.

          Überladen kann man doch in PHP gar nicht, weil die Parameter nicht zur Signatur der Methode gehören oder täusche ich mich da?

          Grüße

          Daniel

          1. 你好 Daniel,

            Nein, das ist vollstaendig normal so. Das ist doch Sinn und Zweck von
            Vererbung.
            Nur, das Konstruktoren normalerweise nicht vererbt werden.

            Naja, das ist Sprach-Abhaengig. In Ruby wird das z. B. durchaus gemacht.

            So wie das Beispiel von Jeena aussieht, hat eine Klasse wohl einen
            Default-Konstruktor, wenn kein anderer angegeben wird. Und von der
            Elternklasse wird in dem Fall wohl einfach der Konstruktor ohne Argumente
            aufgerufen.

            Nein, PHP arbeitet auch mit Ueberladung bei Konstruktoren. Probiers aus:

              
            <?php  
              
            class Abc {  
              function Abc($a) {  
                echo "hohoho: $a\n";  
              }  
            }  
              
            class Bc extends Abc {  
            }  
              
            $a = new Bc();  
            ?>  
            
            

            Erstens gibt das eine Warnung wg. des fehlenden Arguments und zweitens wird
            der Konstruktor Abc aufgerufen.

            Überladen kann man doch in PHP gar nicht, weil die Parameter nicht zur
            Signatur der Methode gehören oder täusche ich mich da?

            Ueberladen geht in PHP nur bei Klassen. Funktionen kann man nicht
            ueberladen.

            再见,
            克里斯蒂安

            --
            Wenn gewöhnliche Menschen Wissen erlangen, sind sie weise. Wenn Weise Einsicht erlangen, sind sie gewöhlnliche Menschen.