【发布时间】:2012-07-06 19:55:39
【问题描述】:
长话短说,我的框架中有以下功能:
public function use_parameters()
{
$parameters = func_get_args();
$stack = debug_backtrace();
foreach($stack[0]['args'] as $key => &$parameter)
{
$parameter = array_shift($this->parameter_values);
}
}
其中 $this->parameter_values = array('value1', 'value2', 'value3', 'value4', 'value5', ...);
在以下情况下使用:
$instance->use_parameters(&$foo, &$bah);
分配:
$foo = 'value1';
$bah = 'value2';
再次调用它
$instance->use_parameters(&$something);
会设置
$something = 'value3'
等等。
从 5.3 开始,它将返回“已弃用:调用时传递引用已被弃用”警告。为了符合 5.3 的工作方式,我删除了 & 导致:
$instance->use_parameters($foo, $bah);
不幸的是,这导致参数未设置,我正在努力想出一个解决方案。
为了它的价值,我在 Apache/2.2.16 (Debian) 上运行 PHP v5.3.3-7
任何帮助将不胜感激。
【问题讨论】:
-
停止使用引用。继续使用会导致疼痛甚至死亡。
-
我喜欢 20 分钟没有 cmets 的方式。每个人都在键盘上试图找到一种方法来使它工作。老实说,它看起来并不好 - 我想我现在已经测试了
func_get_args()、func_get_arg()和debug_backtrace()的所有可能排列,我还没有找到任何方法来获取对动态传递的变量的引用。 -
@NikiC:没必要过头了。利亚姆在问有什么替代方案/其他锻炼方式。他乐于接受建议。
-
@itachi 这不是批评之类的 :) 只是个人建议,只要你摆弄参考资料,你就会以一种或另一种方式搞砸。
-
顺便说一句,我计划在 PHP 5.5 中改进对可变参数函数的支持。然后,您还可以使用
function use_parameters(&... $params)之类的语法创建一个接受 by-ref 可变参数的函数。
标签: php pass-by-reference