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

标签 php reflection pass-by-reference

似乎用词不当,因为在 PHP 5.3 中不推荐使用引用传递...无论如何,我想做的是使用反射编写一个单元测试框架,它允许您将参数传递给需要的方法一个引用。例如

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 中完全删除它,我就不会被搞砸了。显然,我不想因为我的测试框架的不足而不得不重写我的项目中的任何代码。有什么想法或建议吗?谢谢! :)

附言我试图查看 phpunit 的文档以查看它是否可以执行此操作,但该站点目前似乎已关闭。任何指向“不要重新发明轮子”解决方案的链接都非常受欢迎,尽管我也对这个问题本身感到好奇。

最佳答案

这段代码没有问题

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

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

打印“你好”,没有警告

你能发布你的确切代码吗?

关于php - 通过引用将参数可移植地传递给 PHP 的 ReflectionMethod::invokeArgs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1902339/

相关文章:

c - 在c中使用参数作为输出

javascript - PHP base64_decode 未将 base64 字符串转换为真正可用的图像文件

php - PHP 可以读取/解析当前虚拟主机的 Apache VirtualHost 配置 block ,以检索 ErrorLog 和 CustomLog 设置吗?

php - 在 PHPUNIT 中测试 API 且不泄露私有(private)凭证的最佳方法

Java:获取类的属性以构造字符串表示

ruby - 从 Ruby 中的方法中检索方法实例

c++ - 通过模板函数 C++ 的引用传递

php - 使用 DataMapper ORM for php 映射字段名称

Java - getConstructor()?

c++ - 简单的引用变量赋值导致全局指针中的段错误?