[OOP] Probleme mit Klassen die sich gegenseitig "redeclaren"

Tim C.

Erfahrenes Mitglied
Also folgendes Problem. Ich habe (um es jetzt hier mal einfach zu halten) 3 Klassen.
1) mysql.class.php
2) menu.class.php
3) admin.class.php

Sowohl admin als auch menu extends mysql, sowohl admin als auch menu haben also von mysql geerbt.

Jetzt brauche ich in der admin Klasse nur ein einziges mal eine methode aus menu. Da ja keine Mehrfachvererbung möglich ist, dachte ich mir nutzt du halt menu::methode();
Aber da macht mir PHP oder alternativ meine Logik einen Strich durch die Rechnung.

Ich bekomme die Fehlermeldung Fatal error: Cannot redeclare class sql in C:\web\minixampp\htdocs\final project\classes\mysql.class.php on line 3
was ja auch irgendwie sinnvoll klingt, da ich mich mit der momentanen Methode schon innerhalb von admin befinden und diese Klasse ja schon von sql erbt und ich nun eine Methode aus einer "externen Klasse" aufrufe, die ebenfalls von sql erbt.

Jetzt ist meine Frage, wie ich das Problem umgehe/ausschalte. Oder ist das einer der Punkte an denen man halt festmachen kann, dass PHP nur bedingt OOP geeignet ist - Das so Sachen halt ohne Mehrfachvererbung nich sauber funktionieren ?

Wäre schön wenn mir wer helfen könnte
mfG
TIm
 
Hiho

du kannst entweder ein Objekt von der Menu-Klasse erstellen und so die Funktion verwenden oder die die admin-Klasse von der Menu-Klasse erben lassen, was aber etwas unlögisch wäre. Ich habs bei mir so gelöst, dass menu gar nicht von mysql erbt sondern ich einfach das mysql-objekt an die user klasse weitergebe.

bringt dir wahrscheinlich jetzt nicht so viel aber mehr fällt mir nicht ein... :)

greetz
gugi
 
Ich werde es Morgen mal mit dem zusätzlichen Objekt probieren, wobei ... irgendwas sagt mir, dass das nicht hinhaut, naja sehen wir ja dann.

Dein zweiter Vorschlag, die admin Klasse von der Menü Klasse erben zu lassen, ist nicht möglich, da die Admin Klasse bereits (wie auch die Menü Klasse) von der SQL Klasse erben muss.
 
Ich habe mich gerade noch einmal versichert aber es ist, so obskur es ist, tatsächlich so, wie ich es in Erinnerung hatte.

Das simple Einbinden der menu.class.php via include reicht schon aus, um den "cannot redeclare class.." Fehler zu bekommen, ich brauche nichtmal auf eine der Methoden zuzugreifen, die Eigenschaften an irgendwas zu vererben oder auf eine Methode 'extern' zuzgreifen. Das simple include('menu.class.php') lang um den Fehler zu bekommen.

Das ist doch ein Witz oder steh ich jetzt hier völlig auf dem Schlauch ?

mit freundlichen geschockten Grüßen
Tim

//edit: *AUTSCH* *peinlich* Fehler gefunden. Der Haken war, dass ich in der admin.class.php sowohl menu.class.php als auch mysql.class.php via include eingebunden habe und in der menu.class.php war nochmals via include die mysql.class.php eingebunden.
Man sollte sich auch mal Gedanken machen, was redeclare heissen könnte :rolleyes:
 
Zuletzt bearbeitet:
Original geschrieben von Tim Comanns
...//edit: *AUTSCH* *peinlich* Fehler gefunden. Der Haken war, dass ich in der admin.class.php sowohl menu.class.php als auch mysql.class.php via include eingebunden habe und in der menu.class.php war nochmals via include die mysql.class.php eingebunden.
Man sollte sich auch mal Gedanken machen, was redeclare heissen könnte :rolleyes:
Ich wollte dir gerade include_once() empfehlen ;). Bei Klassen ist das fast ein Muss.
 
Zurück