В php, как бы вы создали функцию, которая могла бы принимать неограниченное количество параметров: myFunc($p1, $p2, $p3, $p4, $p5...);
Мой следующий вопрос: как бы вы передали им другую функцию?
function myFunc($params){ anotherFunc($params); }
но anotherFunc
получит их, как если бы он был вызван с использованием anotherFunc($p1, $p2, $p3, $p4, $p5...)
call_user_func_array('anotherFunc', func_get_args());
func_get_args
возвращает массив, содержащий все аргументы, переданные функции, из которой он был вызван, а call_user_func_array
вызывает заданную функцию, передавая ей массив аргументов.
Раньше вы должны были использовать func_get_args()
, но в новом php 5.6 (в настоящее время в бета-версии ) вы можете использовать ... operator
вместо использования.
Так, например, вы можете написать:
function myFunc(...$el){ var_dump($el); }
и $el
будет иметь все элементы, которые вы пройдете.
Есть ли причина, по которой вы не можете использовать 1 аргумент функции и передать всю информацию в виде массива?
Ознакомьтесь с документацией для списков аргументов переменной длины для PHP.
Вторая часть вашего вопроса относится к переменным функциям :
… если к имени переменной добавлены круглые скобки, PHP будет искать функцию с тем же именем, что и переменная, и будет пытаться ее выполнить.