Для SQL-запросов с place-holderами (пользовательский ввод - экранирование) использую func_get_args.
Для случаев, когда нужно передавать в функцию несколько параметров, имеющих значения по умолчанию, но не всегда определенных, использую ассоциативный массив. Так удобнее, потому что если четко задавать порядок следования параметров, то нужно будет указывать все неопределенные параметры, идущие перед определенным параметром. А с массивом проверка на отсутствующее значение идет в самой функции.