Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача переменного числа аргументов из функции в функцию

31K
20 января 2009 года
WarLooK
29 / / 23.06.2008
Использование func_get_args() не прокатит, так как передается один параметр в виде массива, как быть?

Пример того что надо сделать:
 
Код:
function parse($query /*,...  тут может быть любое число параметров, которые нужно передать */)
{
    return sprintf($query /*,...  как все необязательные параметры передать сюда */);
}


Короче такой глобальный вопрос "как передавать необязательные параметры в виде необязательных параметров?".

Такое вообще возможно?
244
20 января 2009 года
UAS
2.0K / / 19.07.2006
Мне ничего не приходит в голову, как немного извратиться:
 
Код:
function parse($query/* все остальное */) {
    $arg_list = func_get_args();
    array_map("addslashes",$arg_list);
    eval( "return sprintf(".$query.",".implode(",",$arg_list).");" );
}

ЗЫ: не забыть сделать проверку, если $arg_list пуст
276
20 января 2009 года
Rebbit
1.1K / / 01.08.2005
Я такого не делал, но посмотри на [COLOR=#000000][COLOR=#007700][/COLOR][COLOR=#0000BB]ReflectionFunction.[/COLOR][COLOR=#007700][/COLOR][/COLOR]
244
20 января 2009 года
UAS
2.0K / / 19.07.2006
А вот, только что роясь по мануалу, случайно наткнулся. Функция vsprintf делает то же, что и sprintf, но принимает массив, а не множество переменных
31K
21 января 2009 года
WarLooK
29 / / 23.06.2008
Спасибо, я тоже порылся и нашел еще один очень простой способ, наверное примерно так и реализован vsprintf:
 
Код:
function parse($query/* все остальное */) {
    $args = func_get_args();
    return call_user_func_array('sprintf', $args)
}


Результат получается одинаковый, но если вдруг кому-то понадобится вызывать какую-то другую функцию, то способ может пригодиться.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог