Может ли функция PHP принимать неограниченное количество параметров?
В PHP есть такие функции, как unset()
, которые поддерживают любое количество параметров, которые мы бросаем на них.
Я хочу создать аналогичную функцию, способную принимать любое количество параметров и обрабатывать их все.
Любая идея, как это сделать?
Ответы
Ответ 1
В PHP используйте функцию func_get_args
для получения всех переданных аргументов.
<?php
function myfunc(){
$args = func_get_args();
foreach ($args as $arg)
echo $arg."/n";
}
myfunc('hello', 'world', '.');
?>
Альтернативой является передача массива переменных в вашу функцию, поэтому вам не нужно работать с такими вещами, как $arg[2];
и вместо этого использовать $args['myvar'];
или повторить, какие вещи передаются. Это также бесконечно расширяемый, что означает, что вы можете добавлять новые переменные позже, не изменяя то, что вы уже закодировали.
<?php
function myfunc($args){
while(list($var, $value)=each($args))
echo $var.' '.$value."/n";
}
myfunc(array('first'=>'hello', 'second'=>'world', '.'));
?>
Ответ 2
Вы можете использовать эти функции из области видимости вашей функции:
- func_get_arg()
- func_get_args()
- func_num_args()
Некоторые примеры:
foreach (func_get_args() as $arg)
{
// ...
}
for ($i = 0, $total = func_num_args(); $i < $total; $i++)
{
$arg = func_get_arg($i);
}
Ответ 3
Если вы намереваетесь больше исследований по этому вопросу в будущем, термин, который вы ищете, variadic function. Связанная статья Википедии даже включает пример для PHP.
Ответ 4
У вас будет 3 функции в вашем распоряжении, чтобы работать с этим. Иметь объявление функции:
function foo()
{
/* Code here */
}
Функции, которые вы можете использовать, следующие
func_num_args()
Который возвращает количество аргументов, переданных массиву
func_get_arg ($ index)
Что возвращает значение аргумента по указанному индексу
func_get_args()
Что возвращает массив аргументов.
Ответ 5
Вы можете использовать func_get_args() внутри вашей функции для анализа любого количества переданных параметров.
Ответ 6
если у вас есть PHP 5.6+, вы можете использовать
function sum(...$numbers)
functions.variable-arg-list
Ответ 7
Здесь вы можете узнать больше о передаче параметров в виде массивов аргументов в функцию, используя 3 вышеупомянутые функции args. Я просто собрал вещи в PHP git, чтобы вы могли узнать больше о функциях PHP и трюках классов.
Примеры являются информативными, описательными и проверенными. Нет foo, двузначность бара.
Ответ 8
Если вы используете PHP 5.6 или более позднюю версию, списки аргументов могут включать токен ...
, чтобы обозначить, что функция принимает переменное количество аргументов. Аргументы будут переданы в заданную переменную в виде массива; Просто используя ...
, вы можете получить доступ к неограниченным переменным аргументам.
, например:
<?php
function sum(...$numbers) {
$sum = 0;
foreach ($numbers as $n) {
$sum += $n;
}
return $sum ;
}
echo sum(1, 2, 3, 4, 5);
?>
Если вы используете версию PHP <= 5.5, вы можете получить доступ к неограниченному параметру, используя func_num_args(), func_get_arg() и func_get_args() функции,
Ответ 9
php7 предоставляет простой способ passing and catching unlimited parameters
для функции, используя эллипсы прямо перед именем параметра в определении функции. Ниже приведен пример, демонстрирующий то же самое:
<?php
function print_names(...$names){
foreach($names AS $name) echo "The name is: <b>$name</b>.\n";
}
print_names(
"Superman",
"Ironman",
"Spiderman",
"HULK",
"Thor",
"Captain America",
"Batman"
);
Кредиты: http://dwellupper.io/post/5/passing-unlimited-parameters-to-functions-in-php7