Hallo!
Ich will ein Formular dynamisch aufbauen. Der "Quellcode" des Formulars kommt aus der Datenbank. Ich definiere nun eine Klasse "Form" und in der gibts eine Variable "Elements". Diese hält jeweils weitere Klassen, die jedes Objekt beschreiben (z.B. Combobox etc).
Im Konstruktor von Form steht also:
(...)
$items = $GLOBALS['DB']->select($sql);
for($i = 0; $i < sizeof($items); $i++)
{
$this->elements[$i]['type'] = $items[$i]['type'];
$this->elements[$i]['title'] = $items[$i]['title'];
switch($items[$i]['type'])
{
case 'hidden':
$this->elements[$i]['ctrl'] = new form_hidden(
$this,
$items[$i]['name'],
$items[$i]['value']);
break;
case 'readonly':
$this->elements[$i]['ctrl'] = new form_readonly(
$this,
$items[$i]['name'],
$items[$i]['value']);
break;
(...)
Jede Klasse, die ein Element beschreibt, muss nun etliche Klassen definieren, u.a. "DumpHTML".
In der Memberfunction "DumpHTML" des _Formuars_ wird nun das ganze Formular ausgegeben, u.a.:
$nr = sizeof($this->elements);
for($i = 0; $i < $nr; $i++)
{
(...)
if(method_exists($this->elements[$i]['ctrl'], 'DumpHTML'))
$this->elements[$i]['ctrl']->DumpHTML();
(...)
}
Nun erhalte ich genau in der Zeile
$this->elements[$i]['ctrl']->DumpHTML();
den folgenden Fehler:
Fatal error: Call to a member function on a non-object in /home/intranet/pub_html/inc/forms.inc.php on line 36
Wieso erhalte ich diesen Fehler?
Peter
PS: Hat von euch schon mal jemand sowas aehnliches gemacht? Formulare, die auf eine Datenbank verweisen sind naemlich schwer zu machen, da wollte ich eben gleich eine komplette Klasse schreiben, mit der ich das komplette Formular nur mit Hilfe einer Tabelle designnen muss und sofort durch einen Aufruf verwenden kann... Gibt's da bessere Lösungsansätze als meinen?
Bremsen Klassen PHP eigentlich sehr aus? Ich hab' lange keine verwendet, da ich dache, das macht den Code sehr langsam, aber mittlerweile verdichtet sich der Verdacht, dass dem nicht so ist, und dass sie - richtig eingesetzt - erst guten Code ausmachen. (eine Gegenfrage wie 'alles was richtig eingesetzt ist, ist gut' ist hier überflüssig, denn ich kann alles, was mit Klassen möglich wäre auch ohne Klassen machen) Stimmt das?