call_user_func_arrayで参照を返す

38度の熱が上がって冷めてきたあとでふと思いました。
どうしてもきれいにはいきませんが、初心に返って返値としてではなく引数と渡すとできると思います。

<?php

class Foo {
    var $s = "foo";

    function output()
    {
        print $this->s."\n";
    }
}

class Bar {
    function change(&$obj, $s)
    {
        $obj->s = $s;
        return true;
    }
}

$foo = new Foo();
$bar = new Bar();

$copy =& $foo;
$foo->output();
$copy->output();

call_user_func_array(array(&$bar, 'change'), array(&$foo, 'bar'));
$foo->output();
$copy->output();

?>