Изменяемое количество параметров функции в PHP

Иногда возникают случаи, что при создании функции мы заранее не можем определить сколько в неё будет передано параметров. В большинстве случаев это решается одним параметром в виде массива. Но иногда массив использовать не удобно, и нужно использовать именно параметры при вызове функции. Примером может служит функция sprintf в которой всего один параметр обязательный, но в неё может быть передано какое угодно количество дополнительных параметров. Итак, как мы это можем сделать? Для решения этой задачи нам понадобиться функция func_get_args(). Эта функция вернёт нам список всех переданных параметров. Объясню на примере:

function my_printf($msg, $args = null) {
  if ($args !== null) {
    return vsprintf($msg, array_slice(func_get_args(), 1));
  } else {
    return $msg
  }
}

В примере проверяется есть ли дополнительные аргументы и если они есть, то от списка переданных аргументов отрезается первый элемент (само сообщение) и оставшиеся аргументы передаются функции vsprintf. А если аргументов нет, то тогда просто возвращается само сообщение.

Для полноты картины приложу так же вариант описанный в самом начале, с параметрами в виде массива.

function data($params = array()) {
  $default = array(
    'param_one' => 'foo',
    'param_two' => 'bar'
  );
  $params = array_merge($default, $params);
  //...
  return $params;
}
$result = data(array('param_one' => 'other'));
print_r($result);
/*
Array
(
    [param_one] => other
    [param_two] => bar
)
*/

Автор: Сергей Степанов

Поделиться @

Пока нет коментариев. Будьте первым!