Как валидировать большое количество свойств класса? Привет.
Предположим есть некий веб-сервис который принимает на вход данные о пользователе: ФИО, пол, профессия, город и т.д., всего их около 20. Все обязательны.
Мне необходимо работать с этим сервисом.
Для этого у меня есть класс User, в котором есть куча свойств:Class User {
private $lastName;
private $firstName;
private $city;
....
}
При создании объекта класса User необходимо установить значения этих свойств.
Правильно ли я понимаю, что у меня будет 20 методов вида setLastName(), setFirstName(), setCity() и т.д.? Это нормальная практика? Или есть более "красивый" способ?
Кроме того, где должна происходить валидация значений? В этих же методах?
Еще меня смущает "некрасивый" код вида:$user = new User();
$user->setLastName('Ivanov');
$user->setFirstName('Dmitriy');
$user->setCity('Moscow');
....
т.е. порядка 20 строк с установкой значений.

21 Авг 2019 в 07:01
244 +1
0
Ответы
1

Для работы с большим количеством свойств класса и их валидации, можно применить следующие подходы:

Использование конструктора класса для установки значений свойств:

class User {
private $lastName;
private $firstName;
private $city;
public function __construct($lastName, $firstName, $city) {
$this->setLastName($lastName);
$this->setFirstName($firstName);
$this->setCity($city);
}
public function setLastName($lastName) {
// Валидация значения lastName
$this->lastName = $lastName;
}
public function setFirstName($firstName) {
// Валидация значения firstName
$this->firstName = $firstName;
}
public function setCity($city) {
// Валидация значения city
$this->city = $city;
}
}

$user = new User('Ivanov', 'Dmitriy', 'Moscow');

2. Использование массива для передачи значений свойств:
```php
class User {
private $data = [];
public function __construct($data) {
foreach ($data as $key => $value) {
$method = 'set' . ucfirst($key);
if (method_exists($this, $method)) {
$this->$method($value);
}
}
}
public function setData(array $data) {
$this->data = $data;
}
public function setLastName($lastName) {
// Валидация значения lastName
$this->data['lastName'] = $lastName;
}
public function setFirstName($firstName) {
// Валидация значения firstName
$this->data['firstName'] = $firstName;
}
public function setCity($city) {
// Валидация значения city
$this->data['city'] = $city;
}
}
$userData = ['lastName' => 'Ivanov', 'firstName' => 'Dmitriy', 'city' => 'Moscow'];
$user = new User($userData);

В обоих случаях валидация значений может происходить в соответствующих сеттерах (методах), где проверяется корректность передаваемого значения. Таким образом, можно избежать дублирования кода и обеспечить чистоту и легкость поддержки вашего класса.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 117 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир