Нет. Ты не можешь. Объявление параметра, переданного с помощью ref, является явным как function something(&$arg1, &$arg2)
. Если вы не знаете количество параметров во время компиляции, вы можете сделать что-то вроде этого:
function something_else($args) {
foreach ($args as $arg)
$GLOBALS[$arg] *= 2;
}
$a = 1;
$b = 3;
something_else(array('a', 'b'));
echo $a . $b; //returns "26"
В основном, код передает функции имена параметров, которые функция будет изменять. $GLOBALS
содержит ссылки на все определенные переменные в глобальной области видимости скрипта. Это означает, что если вызов из другой функции, он не будет работать:
function something_else($args) {
foreach ($args as $arg)
$GLOBALS[$arg] *= 2;
}
function other_function(){
$a = 1;
$b = 3;
something_else(array('a', 'b'));
echo $a . $b; //returns "13"
}
other_function();
вызывает уведомления о неопределенных индексах a
и b
. Поэтому другой подход заключается в создании массива со ссылками на переменные, которые функция будет изменять как:
function something_else($args) {
foreach ($args as &$arg)
$arg *= 2;
}
function other_fucntion(){
$a = 1;
$b = 3;
something_else(array(&$a, &$b));
echo $a . $b; //returns "26"
}
other_fucntion();
Обратите внимание на &
в строке foreach
. Это необходимо, чтобы не создавать новую переменную, повторяющуюся в массиве. PHP> 5 необходим для этой функции.