Задать вопрос
Taras_Serevann
@Taras_Serevann
веб-разработчик, автор

Передача параметров в конструктор аргументами функции или массивом?

Параметры передаются аргументами:
new Class($param1, $param2, $paramN)

Параметры передаются массивом
new Class(array $params)

Как делать лучше? Видел и тот, и тот подход. Возможно, стоит вообще передавать например, синглтон, который хранит все параметры?
  • Вопрос задан
  • 2941 просмотр
Подписаться 2 Оценить 3 комментария
Решения вопроса 2
trevoga_su
@trevoga_su
Так, первое.
Передавать в виде массива аргументы - просто отвратительно. Потому что придется знать/заучивать ключи массива, что не очень хорошо, а точнее - ужасно.
Представь, если бы все функции в PHP принимали только один массив! Каково бы было? Ты бы смог помнить туеву хучу ключей для каждой функции? Нет.
Далее, редактор не подскажет/покажет, что должен принимать метод или функция. Осложняется phpDoc-ументирование.

Второе.
Если твой класс принимает некие свойства, без которых функционирование класса невозможно в полном объеме, то надо писать сеттеры и геттеры. На каждое свойство.
Это хорошая и правильная практика. Пихать все в конструктор - совсем не лучшая идея. А сеттеры и геттеры позволяют изменить свойства класса в режиме "реального времени".

Когда можно кидать массив с параметрами в функцию или метод? В очень незначительных случаях, когда пропуск того или иного элемента такого массива особо ни на что не повлияет.

Т.е. суть в следующем - класс должен обладать внятным и прозрачным интерфейсом. Передача массива - это антипод такого класса.
Ответ написан
max-kuznetsov
@max-kuznetsov
Главный IT-архитектор
Массив используется там, где нужна гибкость. Т.е. там, где разработчик не может предугадать, сколько параметров придёт при вызове метода, какие типы данных будут иметь передаваемые значения и т.п. За такую гибкость разработчик должен платить, создавая код обработки массива, что может быть весьма нетривиальной задачей. Кроме трудоёмкости и сложности кода получите ещё и потерю производительности. Излишней гибкости следует избегать.

В общем случае лучше передавать либо несколько параметров, либо строго типизированный объект с заданными полями. Причём при передаче большого количества параметров тоже могут быть просадки с производительностью.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы