On May 3, 2008, at 4:46 PM, Jack Bates <ms419@xxxxxxxxxxxxxx> wrote:
I am trying to load PHP objects stored in a database, where the class
name is stored in a column:
$object = new $resultSet->getString(1);
This fails for the same reason that the following fails:
<?php
class Foo
{
public function className()
{
return 'Foo';
}
}
$foo = new Foo;
$bar = new $foo->className();
Fatal error: Class name must be a valid object or a string in test.php
on line 12
I guess this error is due to the confusion of parsing "()" as the
argument list for the "className" function, or the "Foo"
constructor...
I work around this error by using a temp variable:
$tmp = $foo->className(); $bar = new $tmp;
- however the above reads like hacky code : (
When calling dynamically named functions, I generally use
call_user_func() to avoid awkwardness with $object->$tmp($arg1, ...)
In other words, I prefer:
call_user_func(array($object, 'get'.$someName), $arg1, ...);
- to:
$tmp = 'get'.$someName; $object->$tmp($arg1, ...);
However there does not appear to be an analog of call_user_func() for
constructing new instances of dynamically named classes?
If I recall correctly, there was also a way to work around calling
dynamically named functions (e.g. $object->$tmp($arg1, ...);) using
curly braces:
$object->{'get'.$someName}($arg1, ...);
- however I cannot recall the exact syntax.
Can anyone confirm that there is a curly brace syntax for calling
dynamically named functions? Could it be applied to instantiating
dynamically named classes?
Can anyone recommend a cleaner alternative to:
$tmp = $foo->className(); $bar = new $tmp;
Thanks and best wishes, Jack
Does...
<?php
$bar = new $foo->className()();
?>
...work?
Otherwise, I'd just do...
<?php
$className = $foo->className();
$bar = new $className;
?>
...instead of $tmp.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php