Reply to Re: [PHP] dynamic object instances

Your name:

Reply:


Posted by Jochem Maas on 08/11/05 03:46

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
>

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация