Как редактировать информацию в БД через метод? Мужики, нужна помощь. Есть товар. У него к примеру четыре поля в БД. ID, название, цена, описание. В классе Product есть методы setName(id, name), setPrice(id, price), setDescription(id, text).
Раньше я создавал общий метод update и туда добавлял ассоциативный массив с ключами (id, price, name, description), но со временем понял, что расширяться можно только редактированием основного класса, а это противоречит принципу ооп.
Как верно выстроить логику редактирования товара на примере этих четырех полей?
В голову пришло три способа:
1. Оставить как есть и менять ПО ОДНОМУ значению (минус в том, что придется делать submit на каждое поле в форме)
2. Принимать ассоциативный массив и редактировать в одном методе update.
3. Написать промежуточный метод, который на основе ассоциативного массива соберет конструкцию типа
$obj->setId($id);
$obj->setName($name);
$obj->setPrice($price);
$obj->Update();

21 Авг 2019 в 06:59
209 +1
0
Ответы
1

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

Пример реализации:

class Product {
private $id;
private $name;
private $price;
private $description;
public function setName($name) {
$this->name = $name;
}
public function setPrice($price) {
$this->price = $price;
}
public function setDescription($description) {
$this->description = $description;
}
public function updateProduct($data) {
foreach ($data as $key => $value) {
switch ($key) {
case 'id':
$this->id = $value;
break;
case 'name':
$this->setName($value);
break;
case 'price':
$this->setPrice($value);
break;
case 'description':
$this->setDescription($value);
break;
}
}
}
public function Update() {
// Реализация обновления продукта в БД
}
}

Теперь при вызове метода updateProduct с передачей ассоциативного массива данных, объект Product будет обновлять только переданные значения, без необходимости вызывать каждый метод отдельно.

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