Как правильно инициализировать класс с большим количеством полей?

Имеется ORM (скорее, QueryBuilder), в котором есть метод getByID, возвращающий массив с полями одной строки таблицы из БД.
Нужно превратить этот массив в объект, у которого есть своя бизнес-логика.

Возьмем, к примеру, пользователей.
У пользователя около двух десятков полей, часть из них обязательные, часть - нет. В конструкторе класса User нужно перечислить все эти поля и передавать их при инициализации? А если нужно выбрать не все поля, а только часть?

Подскажите, пожалуйста, что почитать на эту тему. Возможно, есть какие-то существующие решения с открытым кодом, на которых можно поучиться?
  • Вопрос задан
  • 2570 просмотров
Решения вопроса 3
StrangeAttractor
@StrangeAttractor
Я не специалист по PHP (я больше по части C# и Scala), но думаю, что в конструктор это пихать не нужно. Я бы сделал два конструктора: без параметров (чтобы создающая его функция сама проставляла поля по отдельности (в C# для этого есть специальный синтаксис, где его нет - можно просто обычным путём)) и с массивом в качестве параметра (чтобы разобрать его внутри конструктора).
Ответ написан
@apasen
$data = array(
   'name' => '',
   'email' => '',
   ....
)

$object = new Users()

foreach($data as $field => $value){
  $method = 'set' . ucfirst($field);
  if(method_exists($object, $method)){
     $object->{$method}($value)
  }
}


Или же использовать магические методы __set, __get
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
IMAGINWEB Москва
от 55 000 до 85 000 руб.
Владис Владимир
от 100 000 до 150 000 руб.
iConText Москва
от 120 000 руб.
27 июн. 2019, в 01:26
50000 руб./за проект
27 июн. 2019, в 00:27
250000 руб./за проект