27apricot
Erfahrenes Mitglied
Hallo,
folgende Problemstellung:
Beim Aufruf der Klasse aus dem zweiten Modul kommt nun die Fehlermeldung »Fatal error: Cannot redeclare class ausgabe in …«
Ich habe bereits versucht, die Klassen »ausgabe« als selbständige (und nicht als »html«-Kind-)Klassen zu deklarieren, doch auch das hat nichts geändert.
Eine Lösung, die funktioniert, ist, den Ausgabe-Klassen jeweils spezifische Namen zu geben (also »ausgabe_kalender« und »ausgabe_news«) und die Initialisierung des jeweiligen Objektes mit Hilfe der eval()-Funktion. Das sieht dann so aus:
Diese Lösung jedoch erscheint mir nicht sehr elegant. Hat jemand eine bessere Idee? Oder ist die Variante mit eval() doch »saubere Programmierung«?
Vielen Dank im Voraus,
27apricot
folgende Problemstellung:
- für ein CMS habe ich in verschiedenen Modulen (z. B. Kalender und News) jeweils eine Klasse »ausgabe« mit teilweise gleichnamigen Methoden (Beispiel: zeige_db_eintraege())
- Die Klasse »ausgabe« ist jeweils Kindklasse der Klasse »html«
- eine Methode von »html« initialisiert nun für Kalender und News je ein Objekt der Klasse »ausgabe« aus dem jeweiligen Modul, vorher wird die Datei, welche die Klasse enthält jeweils mit »require_once« aufgerufen, um die Klasse zur Verfügung zu stellen
PHP:
require_once $pfad_modul;
$obj_ausgabe = new ausgabe;
$echo = $obj_ausgabe->zeige_db_eintraege();
Beim Aufruf der Klasse aus dem zweiten Modul kommt nun die Fehlermeldung »Fatal error: Cannot redeclare class ausgabe in …«
Ich habe bereits versucht, die Klassen »ausgabe« als selbständige (und nicht als »html«-Kind-)Klassen zu deklarieren, doch auch das hat nichts geändert.
Eine Lösung, die funktioniert, ist, den Ausgabe-Klassen jeweils spezifische Namen zu geben (also »ausgabe_kalender« und »ausgabe_news«) und die Initialisierung des jeweiligen Objektes mit Hilfe der eval()-Funktion. Das sieht dann so aus:
PHP:
require_once $pfad_modul;
eval('$obj_ausgabe = new ausgabe_'.$modul.';');
$echo = $obj_ausgabe->zeige_db_eintraege();
Vielen Dank im Voraus,
27apricot