Re: dynamic object instances

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thomas Angst wrote:
Hello List,

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.

to keep it easy have your ctors be able to except an assoc array as the first
argument as an alternative to its normal arg list - or just use an assoc array
period - that combined with a call to expand() in the ctor.

then... something like:

function create($class, $params)
{
	if (!class_exists($class)) {
		return null;
	}

	return new $class( $params );
}

<TAKE_NOTE>
btw if your on php4 your probably what to be using lots of f'ing '&' signs.
</TAKE_NOTE>

alternatively it's either:

1. use eval() - yuck
2. make all your objects have empty ctors and force them to have an _init()
method that actually does the work e.g.

function create($class)
{
	if (!class_exists($class)) {
		return null;
	}

	$params = func_get_args();
	$params = array_slice($params, 1);

	$o = new $class();
	call_user_func_array(array($o, '_init'), $params);
	return $o;
}

3. re-evaluate what you are trying to achieve with the create function.
maybe you need a factory base class instead? (for instance)

thanks for all answers,
Thomas


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux