В 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 будет искать функцию с тем же именем, что и переменная, и будет пытаться ее выполнить.