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

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

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

Подскажите, пожалуйста, что почитать на эту тему. Возможно, есть какие-то существующие решения с открытым кодом, на которых можно поучиться?
  • Вопрос задан
  • 2633 просмотра
Решения вопроса 3
akubintsev
@akubintsev
Опытный backend разработчик
DataMapper или ActiveRecord
Ищите ORM
Ответ написан
Комментировать
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
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Use ActiveRecord, Luke.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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