Есть ли способ определить функцию в PHP, который позволяет Вам определить переменную сумму параметров?
на языке я более знаком с ним, похож так:
function myFunction(...rest){ /* rest == array of params */ return rest.length; }
myFunction("foo","bar"); // returns 2;
Спасибо!
Да. Используйте func_num_args ()
и и
func_get_arg ()
, чтобы получить аргументы:
<?php
function dynamic_args() {
echo "Number of arguments: " . func_num_args() . "<br />";
for($i = 0 ; $i < func_num_args(); $i++) {
echo "Argument $i = " . func_get_arg($i) . "<br />";
}
}
dynamic_args("a", "b", "c", "d", "e");
?>
в PHP 5.6+ Теперь вы можете использовать вариационные функции :
<?php
function dynamic_args(...$args) {
echo "Number of arguments: " . count($args) . "<br />";
foreach ($args as $arg) {
echo $arg . "<br />";
}
}
dynamic_args("a", "b", "c", "d", "e");
?>
Я бы побудил вас пройти массив в вашу функцию, таким образом, когда вы можете иметь столько разных параметров, хранящихся в этом массиве. Есть много операций, которые вы можете сделать на массиве, как только он находится в функции, чтобы получить нужную нужную правильную информацию.
$array = array();
$array[0] = "a";
$array[1] = 1;
myFunction($array);
Вы можете принимать переменное количество аргументов в любую функцию, если их достаточно, чтобы заполнить все объявленные аргументы.
<?php
function test ($a, $b) { }
test(3); // error
test(4, 5); // ok
test(6,7,8,9) // ok
?>
Для доступа к дополнительным неименованным аргументам, переданным в test()
, вы используете функции func_get_args()
, func_num_args()
и func_get_arg($i)
:
<?php
// Requires at least one param, $arg1
function test($arg1) {
// func_get_args() returns all arguments passed, in order.
$args = func_get_args();
// func_num_args() returns the number of arguments
assert(count($args) == func_num_args());
// func_get_arg($n) returns the n'th argument, and the arguments returned by
// these functions always include those named explicitly, $arg1 in this case
assert(func_get_arg(0) == $arg1);
echo func_num_args(), "\n";
echo implode(" & ", $args), "\n";
}
test(1,2,3); // echo "1 & 2 & 3"
?>
Мне нравится использовать подход в стиле Javascript с моими параметрами PHP. Это позволяет лучше настраивать «параметры» и их значения по умолчанию (которые я сейчас рассмотрю). Например, предположим, что у вас есть функция, которая возвращает диапазон значений времени в массиве. Параметр 1 - время начала, параметр 2 - время окончания, параметр 3 - интервал времени, и любой параметр после него является необязательным (например, «format» => «24-часовой», «include_seconds» => TRUE и т. Д. ).
Я бы определил функцию следующим образом:
function returnTimeInterval($startTime, $endTime, $interval, $options = array())
{
// the first thing to do is merge options in with our defaults
$options = array_merge(array(
"format" => "24-hour",
"include_seconds => TRUE
// etc.
), $options);
Это позволяет установить значения по умолчанию внутри функции, которые затем можно переопределить, что довольно круто. Конечно, вам нужно позаботиться о том, чтобы странные неиспользуемые параметры не были переданы, но я оставлю это вам. :)