Dynamische Instantiierung von Klassen möglich?

JaguarGorgone

Mitglied
Hallo,

ich programmiere gerade ein CMS und nutze dafür Klassen.
Jetzt dachte ich mir, dass man die Instantiierung der Klassen automatisieren könnte.

Die Voraussetzungen dafür sind, dass der Dateiname gleich der Klasse und auch gleich der Variablen mit dem Objekt ist.

Alle Klassendateien befinden sich in einem Verzeichnis.

Jetzt wird das Verzeichnis ausgelesen und auf das von mir definierte Klassenmerkmal (Dateiendung class.php) überprüft. Zunächst wird die Datei eingebunden mit include.

In einem zweiten Schritt wird das Verzeichnis erneut ausgelesen und nun in einer Schleife eine Instanz jeder Klasse erzeugt.

Der Code für die Instantiierung:
PHP:
$class = explode(".", $file); // Liest den Dateinamen aus (= Name der Klasse)
if(class_exists($class[0])) // Überprüfung, ob die Klasse besteht
{
        ${$class[0]} = new $class[0]; // Erzeugung einer neuen Instanz der Klasse
}

Leider funktioniert das nicht. Später taucht nämlich dann die Fehlermeldung auf:
Code:
Call to a member function ... on a non-object in ...
was ja darauf schliessen lässt, dass die Instanz nicht existiert.

Ich denke das Problem liegt bei
Code:
new $class[0]

Meine Frage also, ob die dynamische Erzeugung möglich ist und wenn ja, wie. Oder muss ich mich von dem Gedanken verabschieden?

Danke für Eure Hilfe
 
Mache Klammern hinter die Variable, die Deinen Klassennamen enthält, dann funktioniert es.
Hier ein Beispiel:
PHP:
<?
class foo {
    var $v=null;
    function foo ($var) {
        $this->v=$var;
    }
    function out() {
        echo $this->v;
    }
    
}

$c=array("foo");
$f=new $c[0]("bar");
$f->out();
?>
Es ist natürlich nicht zwingend, dass Dein Konstruktor einen Paramater erwartet, aber die Klammern müssen beim Aufruf sein.

Gruß hpvw
 
Hallo hpvw,

vielen Dank für Deine schnelle Antwort.

Es funktioniert. Ich hatte im Eifer die Klammern vom statischen Aufruf nicht zum dynamischen übernommen.

Besten Dank nochmal und schöne Grüsse
 
Zurück