gpt4 book ai didi

PHP 通过引用传递混淆

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:08 25 4
gpt4 key购买 nike

长话短说,我有以下功能作为我的框架的一部分:

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);

不幸的是,这导致无法设置参数,我正在努力想出一个解决方案。

为了它的值(value),我在 Apache/2.2.16 (Debian) 上运行 PHP v5.3.3-7

如有任何帮助,我们将不胜感激。

最佳答案

您不能在 PHP 中这样做,并且您在滥用引用的概念。您必须明确指定引用参数,尽管使用默认值。 但是,您不想使用 NULL 作为默认值,因为这是未分配的引用变量将被设置的值。所以你需要定义一些你知道不会用作参数的常量,现在代码看起来像

    const dummy="^^missing^^";

public function use_parameters(&$a, &$b=self::dummy, &$c=self::dummy ) {
$a=array_shift($this->parameter_values);
if($b!==self::dummy) $b=array_shift($this->parameter_values);
if($c!==self::dummy) $c=array_shift($this->parameter_values);
# add $d,$e,$f,... as required to a sensible max number
}

请注意,因为您正确使用了引用,所以不需要 debug_backtrace() 程序。

关于PHP 通过引用传递混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com