简而言之,我将以下功能作为我的框架的一部分:
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
非常感谢任何帮助。
答案 0 :(得分:2)
你不能用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()。
答案 1 :(得分:1)
你不能在PHP 5中做到这一点,或者......你已经看到过你可以做到这一点,但它已被弃用并引发警告。您必须具有预定义的函数参数最大计数或使用数组:
public function use_parameters(&$arg1, &$arg2 = NULL, &$arg3 = NULL)
{
// if ($arg2 !== NULL)
// if ($arg3 !== NULL)
}
$parameters = array(0 => &$foo, 1 => &$bah);
public function use_parameters($args)
{
// Handle the array elements
}