Недостатком использования именованных параметров является документирование параметров с помощью PHPDoc. Многие редакторы / IDE предоставляют «автоматическую» документацию, которая может проанализировать ваш код и сгенерировать общие докблоки.
, например
function foo(array $bar, SomeClass $stuff) { returns $magic; }
будет производить:
/**
* foo
*
* @param array $bar
* @param SomeClass $stuff
* @return mixed
*/
function foo(array $bar, SomeClass $stuff) { returns $magic; }
Если вы поместите все свои параметры в массив $ params, он будет выглядеть только как
/**
* foo
*
* @param array $params
* @return mixed
*/
Это также добавляет вашим разработчикам дополнительную нагрузку на ввод дополнительного кода для каждого параметра. Я бы предложил использовать сочетание двух подходов.
например. Если бы у вас была функция для возврата элемента ввода текста HTML, вы могли бы иметь следующую сигнатуру метода:
/**
* formText
*
* @param string $name name of text element
* @param string $value value of text element
* @param array $options additional options for text element
* @return string
*/
function formText($name, $value, $options = array());
Таким образом, вы можете легко передавать наиболее распространенные значения в функцию.
$this->formText('foo', 'Default...');
и если вам нужны дополнительные, менее распространенные параметры, вы должны использовать удобный синтаксис именованных параметров:
$this->formText('foo', 'Default...', array(
'class' => 'bold highlighted'
));
в противном случае, используя только общий массив $ params, вам нужно будет набрать:
$this->formText(array(
'name' => 'foo',
'value' => 'Default...'
));