Inhalt einer Variable als Argument einer Funktion parsen

Chrizler

Grünschnabel
Bei dem Versuch Klassen dynamisch zu Laden und in einer Superklasse zu Instanzieren stehe ich vor einer hoffendlich überwindbaren Hürde. Es geht darum die Argumente, welche mit func_get_args() in einer Variable abgelegt wurden, an ein neues Objekt zu übergeben. Zur Verständlichkeit ein kleines Codebeispiel.
PHP:
$args = func_get_args();
$params = implode(', ', $args);
return $this->$class =& new $class(   ----->? $params ?<-----  );
Wie kann ich also PHP beibringen $params zu *preparsen*?

mfg Chrizler
 
PHP ist (noch) recht unreif, was Überladungen angeht... Für dein Vorhaben würde sich eventuell die Funktion [phpf]call_user_func_array[/phpf] anbieten, aber ob diese mit der Erzeugung eines Objekts klarkommt, weiß ich leider nicht.
Alternativ kannst du statt vieler Parametervariablen ein Array mit sämtlichen Parametern gestatten, aber ob das so ne dolle Idee ist, weiß ich nicht...

Die Frage ist natürlich, ob man PHP zu solchen Kunststücken zwingen muss oder ob ein wenig weniger Morphing ein wenig mehr sein könnte ;)
 
Danke erstmal
call_user_func_arg( ) funktioniert leider in diesem Fall nicht. Weil ich nicht sämtliche Klassen umschreiben möchte habe ich das erstmal sehr unelegant gelöst.
PHP:
$args = func_get_args();
return $this->$class =& new $class($arg[0], $arg[1], $arg[2], $arg[3], $arg[4]);
Für weiter Vorschläge bin ich natürlich dankbar.

mfg Chrizler
 
Nicht dass wir jetzt aneinander vorbeireden: Ich meinte call_user_func_array() und nicht call_user_func_arg().

Habe nochmal schnell die neuesten Kommentare in der Doku gelesen, und Folgendes als sehr interessant befunden:
If you are thinking of using call_user_func_array to instantiate an object (see comments below using Reflection) then since v5.1.3 you can use the Reflection::newInstanceArgs() method.

PHP:
<?php

// arguments you wish to pass to constructor of new object
$args = array('a', 'b');

// class name of new object
$className = 'myCommand';

// make a reflection object
$reflectionObj = new ReflectionClass($className);

// use Reflection to create a new instance, using the $args
$command = $reflectionObj->newInstanceArgs($args);

// this is the same as: new myCommand('a', 'b');
?>
 
Super, das funktioniert einwandfrei. Mit dem Thema reflection hatte ich mich noch garnicht befasst, aber das ist eine gute Gelegenheit. Vielen dank für die kompetente Hilfe.

mfg Chrizler
 
Zurück