Иногда возникают случаи, что при создании функции мы заранее не можем определить сколько в неё будет передано параметров. В большинстве случаев это решается одним параметром в виде массива. Но иногда массив использовать не удобно, и нужно использовать именно параметры при вызове функции. Примером может служит функция 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
)
*/
Автор: Сергей Степанов
Поделиться @
Пока нет коментариев. Будьте первым!