通过引用将参数可移植地传递给PHP的ReflectionMethod :: invokeArgs

时间:2009-12-14 17:38:57

标签: php reflection pass-by-reference

看起来有点用词不当,因为在PHP 5.3中不推荐使用引用传递...无论如何,我要做的是使用反射编写单元测试框架,允许您将参数传递给需要的方法一个参考。 e.g。

class Bar {
    function TestMethod($arg1, &$result) {
        $result = 'hello';
        return true;
    }
}

$rc = new ReflectionMethod('Bar', 'TestMethod');
$return_val = $rc->invokeArgs($instance, $arguments);

现在,我在http://www.phwinfo.com/forum/comp-lang-php/273316-how-invoke-reflectionmethod-pass-variable-reference-asargument.html发现了一个论坛帖子,这使我简单地将变量引用粘贴到我的$ arguments数组中:

$arguments = array('arg1', &$byref_result);

这确实有效但是给出了“不推荐使用:调用时间传递引用已被弃用”错误。我想确保这些代码是向前兼容的,所以如果它们在PHP 6中完全删除它我将不会被搞砸。显然,由于测试框架的不足,我不想重写项目中的任何代码。任何想法或建议?谢谢! :)

P.S。我试图查看phpunit的文档,看它是否可以做到,但该网站似乎暂时停止。任何链接到“不重新发明轮子”的解决方案都非常受欢迎,尽管我对这个问题本身也很好奇。

1 个答案:

答案 0 :(得分:6)

此代码没有问题

class Bar {
    function test($arg1, &$result) {
        $result = 'hello';
    }
}

$arguments = array('', &$b);
$rc = new ReflectionMethod('Bar', 'test');
$rc->invokeArgs(new Bar, $arguments);
var_dump($b);

打印“你好”,没有警告

你能发布确切的代码吗?