Это просто не выполнимо.PHP не поддерживает это, и не имеет большого смысла, что это будет.Единственный способ, которым это может сработать, - это присвоить именованные аргументы, как и в некоторых других языках, делая порядок аргументов неуместным.
Кроме того, ваше требование использовать аргумент с переменным числом аргументов является искусственным и не очень полезным.Просто используйте массив и необязательный аргумент порядка.
Например:
function orderBy(array $columns, string $order = 'asc') {
// do your thing
}
Точнее, проще для понимания пользователями метода и соответствует синтаксису языка.
Если вы хотите, чтобы он выглядел «похожим» на функцию с переменным числом, просто вызовите метод с использованием следующего синтаксиса:
orderBy(["column1", "column5"]);
orderBy(["column2"], 'desc');