Я считаю, что параметры в функции должны передаваться через ассоциативные массивы. Сравните сами:
$string = mb_substr($string, -1, 1, 'UTF-8');
и
$str = mb_substr(array( 'string' => $str, 'start' => -1, 'length' => 1, 'encoding' => 'UTF-8' ));
и в PHP-6
$str = mb_substr([ 'string' => $str, 'start' => -1, 'length' => 1, 'encoding' => 'UTF-8' ]);
Но суть поста не в этом, а в том, как вырезать ненужные параметры из массива, чтобы потом сделать, например, extract.
$svn = array_intersect_key($svn,array_flip(array( 'bin','url','username','password' )));
Так гораздо понятнее. Один небольшой шажок в сторону самодокументируемого кода, который, однако, документацию не отменяет.
Вы, конечно, можете возразить, что первый способ самый короткий, и т.д. и т.п., но когда вы используете несколько ЯП, и возвращаетесь через некоторое время к функции, интерфейс которой не помните - вот тут-то жопа и начнется. 90% времени уйдет на просмотр справочников, повторное забывание интерфейса и повторные же просмотры. А если код чужой? И без документации? То-то же.