Собственно сабж, писал тут функцию рекурсивной stripslashes, подумалось, что неплохо было бы записать ее одним вызовом. Но: если аргумент один, все нормально function a(&$link) { $link = 'a'; } Если больше, начинаются проблемы: function upcase() { $args = &func_get_args(); foreach ($args as &$arg) $arg = strtoupper($arg); } $a = $b = $c = 'lol'; upcase(&$a, $b, $c); // &$a выдаст ворнинг, в большинстве случаев allow_call_pass_time_reference выключен. Но и в обратном случае не отработает) var_dump($a, $b, $c); // 'lol', 'lol', 'lol'... Пока нашел такое решение: function upcase(&$args) { if (is_array($args)) { foreach ($args as &$arg) upcase($arg); } else $args = strtoupper($args); } upcase($a = array(&$_GET, &$_POST, &$_REQUEST)); var_dump($_GET); Но по-моему решение грязное и пошлое. Есть предложения?
Ответ
Пара часов гугления дали такой результат. Он не идеален, но работоспособен)
';
/*
вариант 2 - почти не хак,
но чуть менее удобен и сильно более затратен
в техническом плане(все копируется дважды)
+ абсолютно прозрачен
*/
function upcase2() {
$result = array();
foreach (func_get_args() as $arg)
$result[] = strtoupper($arg);
return $result;
}
$a = $b = $c = 'lol';
list($a, $b, $c) = upcase2($a, $b, $c);
var_dump($a, $b, $c);
/*
Результат работы:
string(3) "LOL" string(3) "LOL" string(3) "LOL"
string(3) "LOL" string(3) "LOL" string(3) "LOL"
*/
?>
Комментариев нет:
Отправить комментарий