Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2005 Teil von März

SELFHTML Forumsarchiv
(OOP) class Anlegen extends Games

Informationsseite
  1. Seite (PHP) (OOP) class Anlegen extends Games von Jeena Paradies, 31. 03. 2005, 22:38
nach unten

(OOP) class Anlegen extends Games

Die folgende Nachricht zum Thema stammt von: Jeena Paradies, 31. 03. 2005, 22:38

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!

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Jeena Paradies, 31. 03. 2005, 22:49

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 [code lang=php]$game = new Anlegen();[/php] und danach erst ein paar Zeilen später 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!

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Christoph Schnauß, 31. 03. 2005, 23:04

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.
--
mailto:christoph.schnauss@berlin.de
http://www.christoph-schnauss.de

ss:| zu:) ls:& fo:) va:) sh:| rl:|

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Jeena Paradies, 31. 03. 2005, 23:16

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!

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 31. 03. 2005, 23:44

你好 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?

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Christoph Schnauß, 03. 04. 2005, 21:48

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.
--
mailto:christoph.schnauss@berlin.de
http://www.christoph-schnauss.de

ss:| zu:) ls:& fo:) va:) sh:| rl:|

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 03. 04. 2005, 21:54

你好 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!"

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Christoph Schnauß, 03. 04. 2005, 22:44

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.
--
mailto:christoph.schnauss@berlin.de
http://www.christoph-schnauss.de

ss:| zu:) ls:& fo:) va:) sh:| rl:|

nach obennach unten

Gelöst aber eine kleine Frage bleibt

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 31. 03. 2005, 23:38

你好 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.

nach obennach unten

(OOP) class Anlegen extends Games

Die folgende Nachricht zum Thema stammt von: Joachim, 31. 03. 2005, 22:56

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.

nach obennach unten

(OOP) class Anlegen extends Games

Die folgende Nachricht zum Thema stammt von: Jeena Paradies, 31. 03. 2005, 23:01

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!

nach obennach unten

(OOP) class Anlegen extends Games

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 31. 03. 2005, 23:36

你好 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

nach obennach unten

(OOP) class Anlegen extends Games

Die folgende Nachricht zum Thema stammt von: Daniel Thoma, 31. 03. 2005, 23:51

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

nach obennach unten

(OOP) class Anlegen extends Games

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 31. 03. 2005, 23:59

你好 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.

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2005 Teil von März

© 1998-2006 Seite Impressum, Software: Classic Forum