* Thomas Angst <ta_php@xxxxxxxxxxxxx>: > I would like to create an object inside a function with its classname > and a parameter list submitted by the function call. > > function create($class, $parameter) { > $obj = new $class($parameter); > return $obj; > } > > This is working very well. But I have not every time the same count of > parameters for a class constructor. > If this is a normal method call of an object I can realise it like this: > > $ret = call_user_func_array(array(&$obj, 'method'), $parameter_array); > The $parameter_array contains as many entries as the function needs. > Works well too. > > But how can I write a function to instance objects with various count of > parameters in the constructor? > I know, can do this with an eval. But I would like to find a solution > where I don't need an eval. Use the func_* functions, along with array_shift(). In addition, you'll need to use either a standard-named static instantiator, or the class name as the constructor method: function create($class) { $args = func_get_args(); array_shift($args); // remove $class from the args list // Do this if using a standard-named static instantiator method // across classes; in this case 'init': return call_user_func_array(array($class, 'init'), $args); // Or use a function named after the class name as the instantiator // method (ala PHP4): return call_user_func_array(array($class, $class), $args); } -- Matthew Weier O'Phinney Zend Certified Engineer http://weierophinney.net/matthew/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php