Действительно ли возможно создать функцию PHP, которая берет переменное количество параметров все они ссылкой?
Это не помогает мне функция, которая получает ссылкой массив значений, ни функции, которая берет ее аргументы, перенесенные в объект, потому что я работаю над привязкой аргумента и композицией функций. Не думайте о передаче ссылкой времени вызова также. Та вещь не должна даже существовать.
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 параметров функции - плохая практика;)
Вы должны иметь возможность передавать все свои параметры, заключенные в объект.
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
Edit: извините, я не заметил, что вы хотите, чтобы они были ссылками .... все, что вам нужно сделать, это передать их как объект.
Вы также можете передать их в массив например
myfunction(array('var1' => 'value1', 'var2' => 'value2'));
, тогда в функции вы просто
myfunction ($arguments) {
echo $arguments['var1'];
echo $arguments['var2'];
}
Массивы также могут быть вложенными.