Hallo Michael,
Erstens würde mich mal interssieren ob es schlecht ist, KLassen in anderen Klassen zu erzeugen?
Ich hoffe ich habe Dich richtig verstanden, mal schaun... Also was Du vor hast nennt man glaub ich "überladen von Klassen" und ist in PHP nur mit einem solchen Trick zu lösen. Ich persönlich habe es glaub ich noch wie wirklich verwendet, ich kenne aber Leute aus der Java-Ecke die das exzessiv betreiben :-D Mir ist das in der Tat ein wenig zu unübersichtlich, aber falsch ist es denke ich mal nicht. Ich schreibe lieber jede Klasse in eine eigene Datei und instanziere das Objekt explizit in der Datei in der ich es brauche. Das geht ganz gut wenn man alle Klasse in eine class.inc schreibt und diese included. So hat man immer Zugriff auf alle Klassen. Zur Zeit arbeite ich an einen grossen Projekt mit. Dort verwenden wir in der Tat eine Art Superklasse, einen sog. Controller der bestimmte Klassen instanziert und auch schon zum Teil konfiguriert. Das macht z.B. bei Template-Klassen Sinn, in unseren Fall ist das Smarty. Sehr praktisch dann in der Anwendung, wie z.B. $superclass->smarty->assign($foo, $boo); im Kopf der Datei steht dann immer nur $superclass = new SuperClass(); oder so...
Zu Deiner Fehlermeldung:
bekomme ich immer eine Fehlermeldung, dass die Funktion undefiniert sei und nicht gefunden werden könne ???
Wenn ich es recht gesehen habe hast Du vergessen die Methode >Neu< aufzurufen, somit kann er natürlich auch nicht das dort instanzierte Objekt >Subobject< finden. Um das zu erreichen musst diese Methode in dem Konstruktor Deine Klasse aufrufen, etwa so:
----------------------------------------------------------
<?php
class subobject
{
// Constructor of Class subobject
function subobject()
{
}
// Method to say Hello
function sayhallo()
{
echo( "Hello" );
}
}
class mainobject
{
//Membervariable $subclass
var $subclass = "";
// Constructor of Class mainobject
function mainobject()
{
$this->newsubclass();
}
function newsubclass()
{
$this->subclass = new subobject();
}
}
$newclass = new mainobject();
$newclass->subclass->sayhallo();
?>
----------------------------------------------------------
Ich habs mal an einem eigenen Beispiel getestet, das Script läuft soweit. Bei Dir ist wahrscheinlich alles soweit richtig, es fehlt halt in deiner Hauptklasse der Konstruktor. Dieser macht nichts anderes als die entsprechende Methode - welche das neue Objekt instanziert - aufzurufen.
Ich hoffe ich konnte Dir helfen und ich hoffe auch ich hab hier kein Bockmist erzählt. Falls es jemand besser weiss darf dieser mich gerne korrigieren, ich bin leider auch nicht der PHP-Guru...
Gruss AndreD