PHP: список аргументов переменной длины ссылкой?

Действительно ли возможно создать функцию PHP, которая берет переменное количество параметров все они ссылкой?

Это не помогает мне функция, которая получает ссылкой массив значений, ни функции, которая берет ее аргументы, перенесенные в объект, потому что я работаю над привязкой аргумента и композицией функций. Не думайте о передаче ссылкой времени вызова также. Та вещь не должна даже существовать.

24
задан GetFree 24 September 2012 в 12:52
поделиться

3 ответа

PHP 5.6 представил новый вариативный синтаксис , который поддерживает передачу по ссылке. (спасибо @outis за обновление)

function foo(&...$args) {
    $args[0] = 'bar';
}

Для PHP 5.5 или ниже вы можете использовать следующий трюк:

function foo(&$param0 = null, &$param1 = null, &$param2 = null, &$param3 = null, &$param4 = null, &$param5 = null) {
  $argc = func_num_args();
  for ($i = 0; $i < $argc; $i++) {
    $name = 'param'.$i;
    $params[] = & $$name;
  }
  // do something
}

Обратной стороной является то, что количество аргументов ограничено количеством определенных аргументов (6 в примере фрагмента). но с помощью func_num_args () вы можете определить, нужны ли другие.

В любом случае передача более 7 параметров функции - плохая практика;)

16
ответ дан 29 November 2019 в 00:15
поделиться

Вы должны иметь возможность передавать все свои параметры, заключенные в объект.


Class A
{
    public $var = 1;
}

function f($a)
{
    $a->var = 2;
}

$o = new A;
printf("\$o->var: %s\n", $o->var);
f($o);
printf("\$o->var: %s\n", $o->var);

должен печатать 1 2

1
ответ дан 29 November 2019 в 00:15
поделиться

Edit: извините, я не заметил, что вы хотите, чтобы они были ссылками .... все, что вам нужно сделать, это передать их как объект.

Вы также можете передать их в массив например

myfunction(array('var1' => 'value1', 'var2' => 'value2'));

, тогда в функции вы просто

myfunction ($arguments) {

echo $arguments['var1'];
echo $arguments['var2'];

}

Массивы также могут быть вложенными.

-1
ответ дан 29 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: