У меня есть функция PHP, которая принимает переменное количество аргументов (с использованием func_num_args()
и func_get_args()
), но количество аргументов, которые я хочу передать функции, зависит от длины массива. Есть ли способ вызвать функцию PHP с переменным количеством аргументов?
php
variadic-functions
nohat
источник
источник
Ответы:
Если у вас есть аргументы в виде массива,
call_user_func_array
функция может вас заинтересовать .Если количество аргументов, которые вы хотите передать, зависит от длины массива, это, вероятно, означает, что вы можете сами упаковать их в массив - и использовать его для второго параметра
call_user_func_array
.Элементы этого массива, которые вы передаете, будут затем получены вашей функцией как отдельные параметры.
Например, если у вас есть эта функция:
Вы можете упаковать свои параметры в массив, например:
А затем вызовите функцию:
Этот код будет выводить:
т.е. 3 параметра; точно так же, как и функция вызывалась так:
источник
Теперь это возможно в PHP 5.6.x , используя оператор ... (также известный как оператор splat в некоторых языках):
Пример:
источник
В новом Php 5.6 вы можете использовать
... operator
вместо использованияfunc_get_args()
.Итак, используя это, вы можете получить все передаваемые параметры:
источник
Начиная с PHP 5.6 , список переменных аргументов можно указать с помощью
...
оператора.Как видите,
...
оператор собирает список переменных аргументов в массив.Если вам нужно передать переменные аргументы другой функции, это
...
все равно может вам помочь.Поскольку PHP 7 , переменная список аргументов может быть вынужден быть все одного и того же типа тоже.
источник
Для тех, кто ищет способ сделать это с помощью
$object->method
:Мне удалось это сделать в функции конструкции, которая вызывает переменную method_name с параметрами переменных.
источник
$object->method_name(...$array);
$object->method_name(&...$args);
Вы можете просто назвать это.
Вывод:
Массив ([0] => бла) Массив ([0] => бла [1] => бла)
источник
Я удивлен, что здесь никто не упомянул просто передачу и извлечение массива. Например:
Конечно, это не обеспечивает проверку аргументов . Для этого любой может использовать мою функцию ожидания: https://gist.github.com/iautomation/8063fc78e9508ed427d5
источник
Старый вопрос, я знаю, однако, что ни один из ответов здесь не дает простого ответа на этот вопрос.
Я просто поигрался с php, и решение выглядит так:
Эта функция может делать две вещи:
Если он вызывается только с обязательным параметром:
myFunction("Hi")
он напечатает "Hi default"Но если он вызывается с необязательным параметром:
myFunction("Hi","me")
он напечатает «Привет мне»;Я надеюсь, что это поможет всем, кто ищет это в будущем.
источник
Вот решение с использованием магического метода __invoke
(Доступно с php 5.3)
Изнутри того же класса:
Из экземпляра объекта:
источник
call_user_func_array
как указано в ответе, получившем наибольшее количество голосов в 2009 году. Может быть, есть смысл обернуть__invoke
вокруг него лишнее, но я этого не вижу.