[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правильно ли создал Класс
abdula81
Мужики, привет.
Если есть минута, укажите мне на явные ошибки в исполнении, если они есть и что можно упростить или заменить. Вопрос касается именно стиля ООП.
Это модель "Товар". Создание, редактирование, удаление и вывод.

class Product{

protected $db;
private $table = 'products';

public function __construct($db){
$this->db = $db;
}

public function create(array $post){

if(empty($post['name']) || empty($post['price']) || empty($post['brand'])){
throw new AppException('Не заполнены все поля');
}

if($this->checkCopyName($post['name']) > 0){
throw new AppException('Данное название уже используется');
}

$query = "INSERT INTO `".$this->table."` (`name`, `price`, `brand`) VALUE (:name, :price, :brand)";
$stmt = $this->db->prepare($query);
$a = array(
':name' => trim($post['name']),
':price' => intval($post['price']),
':brand' => intval($post['brand'])
);

return $stmt->execute($a);
}

public function edit(array $post){

if(empty($post['id']) || empty($post['name']) || empty($post['price']) || empty($in['brand'])){
throw new AppException('Не заполнены все поля');
}

if($this->checkCopyName($post['name'], $post['id'])){
throw new AppException('Данное название уже используется');
}

$query = "UPDATE `".$this->table."` SET `name` = :name, `price` = :price, `brand` = :brand WHERE `id` = :id";
$stmt = $this->db->prepare($query);
$a = array(
':id' => intval($in['id']),
':name' => trim($in['name']),
':price' => intval($in['price']),
':brand' => intval($in['brand'])
);

return $stmt->execute($a);
}

public function delete($id){
$query = "DELETE FROM `".$this->table."` WHERE `id` = ?";
$stmt = $this->db->prepare($query);
return $stmt->execute(array(intval($id)));
}

private function checkCopyName($name, $id = null){
$query = "SELECT COUNT(*) FROM `".$this->table."` WHERE `name` = ?";
if(!empty($id)){
$query .= " AND `id` != '".intval($id)."'";
}
$stmt = $this->db->prepare($query);
$stmt->execute(array($name));
$cnt = $stmt->fetchColumn();
$stmt->closeCursor();
return $cnt;
}

private function select(array $param){

$where = array();
$placeholder = array();

$query = "SELECT * FROM `".$this->table."`";

if(!empty($param['brand'])){
$where[] = "`brand` = :brand";
$placeholder[':brand'] = intval($param['brand']);
}

if(!empty($param['id'])){
$where[] = "`id` = :id";
$placeholder[':id'] = intval($param['id']);
}

if(count($where) > 0){
$query .= " WHERE ".implode(" AND ", $where);
}

$stmt = $this->db->prepare($query);
$stmt->execute($placeholder);
$rows = $stmt->fetchAll();
$stmt->closeCursor();
return $rows;
}

public function selectAll(){
return $this->select(array());
}

public function selectByID($id){
return $this->select(array('id' => $id));
}

public function selectBrand($id){
return $this->select(array('brand' => $id));
}

}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.