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