Ich habe ein Problem damit, Objekte anhand von Strings die den Namen der dazugehörigen Klasse bezeichnen, zu erstellen.
Ansicht ist ein konstrukt wie unten aufgeführt ja möglich.
Allerdings möchte ich dies jetzt in einem Erstellungs-Entwurfsmuster anwenden.
Meine factory Methode bekommt den Namen der Klasse als String im ersten Parameter überliefert.
Soweit kein Problem.
Jetzt kann diese Klasse allerdings noch mit einer variablen Anzahl von Parametern aufgerufen werden. Diese werden als weitere Parameter an die factory Methode übergeben und mit func_get_args() als array eingesammelt.
Als Ausgangsstellung habe ich also zwei Variablen:
string $classname Name der zu instanzierenden Klasse
array $parameters Array in dem die Parameter für den Konstruktor der Klasse enthalten sind.
Das Problem besteht darin, die Parameter wieder als variable anzahl von Parametern weiterzugeben.
Würde ich eine Methode eines bereits bestehenden Objekts aufrufen, wäre dies ja mit call_user_func_array() möglich.
Leider kann ich aber nicht den konstruktor direkt aufrufen (bzw. er liefert mir dann einfach kein Objekt zurück).
Auch die methode newInstance() der neuen Reflection API verhält sich nur so wie call_user_func, nicht wie call_user_func_array.
Sie erwartet.
In einer PHP-Mailing Liste habe ich eine Diskussion gefunden, in der eval() zum instanzieren der Klasse benutzt wurde.
Kennt vielleicht jemand eine Möglichkeit dies zu lösen?
Wäre die Anwendung von eval() in diesem Bezug ebenfalls evil() oder handelt es sich gerade hierbei um eine mögliche Anwendung für die eval() gemacht wurde?
Vorab: Nein, ich möchte die zu instanzierenden Klassen nicht umschreiben, damit sie selbst den array der die parameter enthält entgegennehmen. Dies widerspräche dem Sinn objekt-orientierter Entwicklung.
Ansicht ist ein konstrukt wie unten aufgeführt ja möglich.
PHP-Code:
$foo = new $foo();
Meine factory Methode bekommt den Namen der Klasse als String im ersten Parameter überliefert.
Soweit kein Problem.
Jetzt kann diese Klasse allerdings noch mit einer variablen Anzahl von Parametern aufgerufen werden. Diese werden als weitere Parameter an die factory Methode übergeben und mit func_get_args() als array eingesammelt.
Als Ausgangsstellung habe ich also zwei Variablen:
string $classname Name der zu instanzierenden Klasse
array $parameters Array in dem die Parameter für den Konstruktor der Klasse enthalten sind.
Das Problem besteht darin, die Parameter wieder als variable anzahl von Parametern weiterzugeben.
Würde ich eine Methode eines bereits bestehenden Objekts aufrufen, wäre dies ja mit call_user_func_array() möglich.
Leider kann ich aber nicht den konstruktor direkt aufrufen (bzw. er liefert mir dann einfach kein Objekt zurück).
Auch die methode newInstance() der neuen Reflection API verhält sich nur so wie call_user_func, nicht wie call_user_func_array.
Sie erwartet.
In einer PHP-Mailing Liste habe ich eine Diskussion gefunden, in der eval() zum instanzieren der Klasse benutzt wurde.
Kennt vielleicht jemand eine Möglichkeit dies zu lösen?
Wäre die Anwendung von eval() in diesem Bezug ebenfalls evil() oder handelt es sich gerade hierbei um eine mögliche Anwendung für die eval() gemacht wurde?
Vorab: Nein, ich möchte die zu instanzierenden Klassen nicht umschreiben, damit sie selbst den array der die parameter enthält entgegennehmen. Dies widerspräche dem Sinn objekt-orientierter Entwicklung.
Kommentar