Как редактировать информацию в БД через метод? Мужики, нужна помощь. Есть товар. У него к примеру четыре поля в БД. 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();
В данном случае, наиболее правильным подходом будет использование третьего способа - написать промежуточный метод, который будет собирать значения из ассоциативного массива и передавать их в соответствующие методы объекта. Это позволит избежать дублирования кода и обеспечить более гибкое и расширяемое решение.
Пример реализации:
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 будет обновлять только переданные значения, без необходимости вызывать каждый метод отдельно.
В данном случае, наиболее правильным подходом будет использование третьего способа - написать промежуточный метод, который будет собирать значения из ассоциативного массива и передавать их в соответствующие методы объекта. Это позволит избежать дублирования кода и обеспечить более гибкое и расширяемое решение.
Пример реализации:
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 будет обновлять только переданные значения, без необходимости вызывать каждый метод отдельно.