Я раніше мав подібні філософські дискусії із собою. Ось де я стою більшу частину часу, хоча розумію, що це відповідь, заснована на думці:
Я думаю, що може допомогти відповісти на питання - це передача $ params, яка може мати, а може і не мати встановлені атрибути / члени масиву.
За ці роки я прийшов до такого висновку:
Уникайте проходження масивів.
Чому? Ну, немає ніякого способу встановити або встановити дозорні значення для необов'язково переданих аргументів.
Іншими словами, із вказаним вами кодом ви не можете зробити щось подібне:
function __construct($arg1 = NULL, $arg2 = DEFAULT_VAL) {
$this->arg1 = $arg1;
$this->arg2 = $arg2;
}
$ arg1 та $ arg2 - необов'язкові аргументи - якщо вони не передані, вони мають відповідно NULL та DEFAULT_VAL - не потрібно чітко перевіряти.
Можливо, це видається довільним.
Я думаю, що я розумію те, що ви намагаєтеся зробити - проходження єдиної довідки на відміну від тонни аргументів. Це приводить мене до мого наступного ухилення:
Якщо не передаються "атомні" змінні (рядки, цілі числа, букви), то передаються об'єкти.
Тут є переваги від продуктивності, оскільки передача об'єктів здійснюється за посиланням (хоча масиви, на мою думку, приблизно однакові всередині PHP).
Тож ви можете зробити щось на кшталт:
function __construct(MyAwesomeObject $oArg) {
$this->oArg = $oArg;
}
Аргумент переданого об'єкта гарантовано матиме "властивість1", "властивість2", хоча можливо, і самі значення за замовчуванням.
Крім того, сюди ви можете ввести підказку, і хороший IDE також буде автоматично пропонувати кодування.
Але ми швидко усвідомлюємо, що у нас відбувається курятина та яйця: ви створюєте об'єкт із переданими аргументами об'єкта, які самі потребують побудови в якийсь момент.
То де це залишає нас? Ну, я прийшов до висновку, що врешті-решт усі класи перенаправляються на відсутність кращого терміна до "атомних" змінних (рядки, плаваючі, парні, ints, ресурси, ви отримуєте мою думку), і що я, як правило, намагаюся побудувати всі класи з тими змінними типами або об'єктами, але не масивами.
То я відповів на ваше запитання? певно, не зовсім. Але я сподіваюся, що я проілюстрував щось корисне, хоч і дещо стилістичне. Я думаю, що код трохи чистіший, читабельніший і менш затратний.
Тепер це не означає, що ви не повинні санітувати свої дані. Це вже інша дискусія.
Сподіваюсь, це допомагає.
new object($param1,-some default value so I can specify the next parameter-, $param3);
і тому у вас є різні значення за замовчуванням, кодовані в декількох різних місцях