Добрый день, Прошу подсказать где можно подчерпнуть информацию по данному вопросу. Я пишу программу для добавления и отображения продуктов . Суть в том что должно быть оформлено так: Есть абстрактный класс Product у которого есть переменные Код (Text): public $id; public $sku; public $name; public $price; public $category_id; public $timestamp; У этого класса будет три наследника и у каждого их них будет специальный атрибут. На данный момент у меня написано так что все переменные находятся в классе Product. Как правильно создать подкласс в данном случае? (Код внизу.) Буду очень благодарен любой информации по данному вопросу. PHP: <?php abstract class Product{ // database connection and table name private $conn; private $table_name = "products"; // object properties public $id; public $sku; public $name; public $price; public $category_id; public $size; public $weight; public $height; public $lenght; public $width; public $timestamp; public function __construct($db){ $this->conn = $db; } // create product function create(){ //write query $query = "INSERT INTO " . $this->table_name . " SET sku=:sku, name=:name, price=:price, category_id=:category_id, created=:created"; $stmt = $this->conn->prepare($query); // posted values $this->sku=htmlspecialchars(strip_tags($this->sku)); $this->name=htmlspecialchars(strip_tags($this->name)); $this->price=htmlspecialchars(strip_tags($this->price)); $this->category_id=htmlspecialchars(strip_tags($this->category_id)); $this->size=htmlspecialchars(strip_tags($this->size)); $this->weight=htmlspecialchars(strip_tags($this->weight)); $this->height=htmlspecialchars(strip_tags($this->height)); $this->lenght=htmlspecialchars(strip_tags($this->lenght)); $this->width=htmlspecialchars(strip_tags($this->width)); // to get time-stamp for 'created' field $this->timestamp = date('Y-m-d H:i:s'); // bind values $stmt->bindParam(":sku", $this->sku); $stmt->bindParam(":name", $this->name); $stmt->bindParam(":price", $this->price); $stmt->bindParam(":category_id", $this->category_id); $stmt->bindParam(":size", $this->size); $stmt->bindParam(":weight", $this->weight); $stmt->bindParam(":height", $this->height); $stmt->bindParam(":lenght", $this->lenght); $stmt->bindParam(":width", $this->width); $stmt->bindParam(":created", $this->timestamp); if($stmt->execute()){ return true; }else{ return false; } } function readAll($from_record_num, $records_per_page){ $query = "SELECT id , sku, name, price, category_id, size, weight, height, lenght, width FROM " . $this->table_name . " ORDER BY name ASC LIMIT {$from_record_num}, {$records_per_page}"; $stmt = $this->conn->prepare( $query ); $stmt->execute(); return $stmt; } // used for paging products public function countAll(){ $query = "SELECT id FROM " . $this->table_name . ""; $stmt = $this->conn->prepare( $query ); $stmt->execute(); $num = $stmt->rowCount(); return $num; } // delete the product function delete(){ $query = "DELETE FROM " . $this->table_name . " WHERE id = ?"; $stmt = $this->conn->prepare($query); $stmt->bindParam(1, $this->id); if($result = $stmt->execute()){ return true; }else{ return false; } } } ?>
у вас в коде множество ошибочных нюансов. Я даже не знаю с чего начинать / равноценно потраченному времени на то что вы даже и не поймете. Начните с актуального синтаксиса прописывания методов в классе.