if you need to get a reference back from a method, you can work around call_user_func()'s shortcomings like this:
<?
$globalObj;
class tClass
{
function &instance()
{
global $globalObj;
if(!is_object($globalObj))
{
$globalObj = new tClass();
}
return $globalObj;
}
}
$classname = "tClass";
# calling the function this way won't
# return a reference.
$test = &call_user_func(array($classname,"instance"));
# but if we call it again with the instance
# that we just got, it'll be the right
# one
$test = &$test->instance();
# so test is now a reference to $globalObj, just like it should be
# let's verify it:
$test->blah=1;
echo "<pre>";
print_r($test)."\n";
print_r($globalObj);
echo "</pre>";
# there, now it behaves just like you'd expect
?>
Partager