PHP中按引用传递调用时间的解决方法?

PHP中按引用传递调用时间的解决方法?,php,Php,我正在将一个代码库从PHP5.3升级到PHP5.6 我正在修复代码库中出现的调用时间传递引用,如PHP手册页面所述: 注意:函数调用上没有参考符号-仅在函数上 定义。仅函数定义就足以正确传递 这个论据是引用的。从PHP5.3.0开始,您将得到一个警告 当您使用& 以foo(&$a)表示;。从PHP5.4.0开始,通过引用传递调用时间是 已删除,因此使用它将引发致命错误 我有一些类似的功能: function some_function($a, $b) { ... } some_function

我正在将一个代码库从PHP5.3升级到PHP5.6

我正在修复代码库中出现的调用时间传递引用,如PHP手册页面所述:

注意:函数调用上没有参考符号-仅在函数上 定义。仅函数定义就足以正确传递 这个论据是引用的。从PHP5.3.0开始,您将得到一个警告 当您使用& 以foo(&$a)表示;。从PHP5.4.0开始,通过引用传递调用时间是 已删除,因此使用它将引发致命错误

我有一些类似的功能:

function some_function($a, $b)
{
...
}
some_function($a, $b);
这个函数有时被这样调用:

function some_function($a, $b)
{
...
}
some_function($a, $b);
其他时候,使用现在不推荐使用的调用时间按引用传递功能调用它:

some_function(&$a, &$a);
因此,我无法将函数签名更新为:

function some_function(&$a, &$b)
{
...
}
因为这会影响不想通过引用调用它的调用方

因此,我尝试创建一个对应通过引用传递的变量的引用,并传递引用:

例如,重构来自以下对象的调用:

some_function(&$a, &$a);
致:

但是上面的方法不起作用,似乎PHP还在函数中复制它们


所以我想知道除了有两个版本的函数,一个通过引用获取参数,另一个通过复制获取参数之外,还有其他选项吗?

只需以不同的方式调用函数:

参考:

some_function( $a, $b );
按价值计算:

$copy_a = $a;
$copy_b = $b;
some_function( $copy_a, $copy_b );
并始终使用“按引用”函数。但是当传递副本时,函数不会改变实际的$a和$b

function some_function( &$a, &$b )
{
    ...
}

出于好奇,这个函数做了什么,你有时想用ref,有时想用value?似乎它应该是两个不同的函数。

首先,确定更常见的用法,例如“通过引用”的用法

如果是这样,重构
一些函数

function some_function(&$a, &$b) { ... }
然后添加一个新函数

function some_function_byval($a, $b) { return some_function($a, $b); }
并使用“by value”函数将所有调用更改为使用新的调用


新函数之所以有效,是因为它将参数副本的引用传递给原始函数。

我同意最后一句话。有一件事我想也许By值代码可以放在包装器函数中。哈哈。这就是我的问题所在。进行自动复制创建,并且仍然调用相同的ref函数。确切地说,可以是
一些按值的函数
一些按值的函数
,或者对实际用例更有意义的函数。从技术上讲,您只需要添加按值版本,但是,如果您想让其他开发人员更清楚地了解您创建包装器的原因,那么将两者都添加并不是一个坏主意。这一点很好。我想,当你一年后回到代码中,想知道正常函数又做了什么时,它也可以帮助你:P。