Как валидировать большое количество свойств класса? Привет.
Предположим есть некий веб-сервис который принимает на вход данные о пользователе: ФИО, пол, профессия, город и т.д., всего их около 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
261 +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 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир