(OOP) class Anlegen extends Games
Jeena Paradies
- php
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
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
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äterclass 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.
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
你好 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.
再见,
克里斯蒂安
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.
你好 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.
再见,
克里斯蒂安
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.
你好 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.
再见,
克里斯蒂安
hi,
$Games = new Games(DB_TABLE);
warum machst Du jetzt 2 Objekte?
$game = new Anlegen($DB_TABLE);
^^^
da fehlte auch "$".
Gruesse, Joachim
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
你好 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.
再见,
克里斯蒂安
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
你好 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.
再见,
克里斯蒂安