GELight: Rekursives durchlaufen meiner Objekte

Beitrag lesen

Hallo alle zusammen,

Ich stehe derzeit vor einem Problem, was ich vorher noch nie machen musste. Ich habe eine Hirarchie aus Objekten ( für ein Formular auf Basis von Klassen ).

Als Beispiel:

$formular  ( mein Basisobjekt für das Formular )
->formelemente ( array mit allen angelegten Elementen... objects )

das ganze könnte dann zB. so aussehen:

$formular->formelement["textfeld1"]...;
$formular->formelement["textfeld2"]...;

$formular->formelement["radiogroup"]...;
$formular->formelement["radiogroup"]->item[0];
$formular->formelement["radiogroup"]->item[1];
$formular->formelement["radiogroup"]->item[2];

$formular->formelement["radiogroup1"]...;
$formular->formelement["radiogroup1"]->item[0];
$formular->formelement["radiogroup1"]->item[1];

$formular->formelement["textarea"]...;

So greife ich also als Beispiel auf meine einzelnen Elemente zu, die ich angelegt habe. Wie man sieht entsteht eine Struktur, die noch weiter verschachtelt werden könnte, wenn man zB. noch fieldsets oder dergleichen zur Gruppierung hinzufügen würde usw....

Mein Problem lieg nun an folgendem:
JEDES meiner Objekte besitzt die Methode show(); um es ausgeben lassen zu können. Will ich hier zB. den radiobutton 1 in der gruppe 1 anzeigen lassen, so mache ich das so:

$formular->formelement["radiogroup1"]->item[1]->show();

So kann ich das mit allen meinen Elementen machen.
Ich hätte aber gern eine Methode(function) in meiner Basisklasse "formular", mit der ich einfach das komplette Formular, so wie ich es angelegt habe, ausgeben lassen kann.
Kurz gesagt er soll das formelement-Array durchlaufen ( tut er schon mit einer foreach-schleife ) und mir bei allen Objekten die show()-Methode ausführen. Mein größtes Problem hierbei ist nun, dass zB: bei den Radiobuttons die einzelnen Buttons nochmal in einem Object gruppiert liegen. Somit kann ich nicht einfach sagen...... wenn variable=object... dann führe show() aus.

Wie muss ich da vorgehen?
Hoffe ihr könnt mir ein paar Tipps geben.

Mario