调用时间的解决方法通过PHP中的引用弃用进行传递?

时间:2015-09-23 11:55:49

标签: php

我正在将代码库从PHP 5.3升级到PHP 5.6。

我正在修复我的代码库中通过引用传递调用时间的事件,如PHP手册页http://www.php.net/manual/en/language.references.pass.php中所述:

  

注意:函数调用上没有引用符号 - 仅在函数上   定义。单独的函数定义足以正确传递   参考的论点。从PHP 5.3.0开始,您将收到警告   当你使用& amp;时,不推荐使用“call-time pass-by-reference”   在foo(& $ a);.从PHP 5.4.0开始,调用时传递引用   删除,因此使用它会引发致命错误。

我有一些这样的功能:

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

并且有时会调用此函数:

some_function($a, $b);

和其他时间使用现在已弃用的调用时间传递引用功能调用:

some_function(&$a, &$a);

所以我无法将函数签名更新为:

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

因为这会影响不想通过引用调用它的调用者。

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

例如,重构来自:

的调用
some_function(&$a, &$a);

要:

$refToA = &$a;
$refToB = &$b;
some_function($refToA, $refToB);

但是上面没有用,似乎PHP仍然在函数内部复制它们。

所以只是想知道我是否有其他选择,除了有两个版本的函数,一个通过引用获取args,另一个通过复制获取它们?

2 个答案:

答案 0 :(得分:2)

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

参考:

some_function( $a, $b );

按价值:

$copy_a = $a;
$copy_b = $b;
some_function( $copy_a, $copy_b );

并始终使用引用函数。但是当传递副本时,函数不会改变真正的$ a和$ b。

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

出于好奇,你有时想通过ref和其他时间的价值来做什么功能?似乎应该是两个不同的功能。

答案 1 :(得分:0)

首先,确定更常见的用法,比如说是#34;参考"。

如果是,请将some_function重构为

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

然后添加新功能

function some_function_byval($a, $b) { return some_function($a, $b); }

并使用"按值"更改所有通话功能使用新的。

新功能的作用很简单,因为它会将对参数副本的引用传递给原始函数。