PHP Прохождение через путаницу

Короче говоря, у меня есть следующая функция как часть моей рамки:

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

Это, к сожалению, привело к тому, что аргументы не были установлены, и я изо всех сил пытаюсь найти решение.

Для чего стоит запустить PHP v5.3.3-7 на Apache / 2.2.16 (Debian)

Любая помощь будет принята с благодарностью.

Вы не можете сделать это на 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 () botch.

Вы не можете сделать это на 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 }