За последние 24 часа нас посетил 16581 программист и 1643 робота. Сейчас ищут 1274 программиста ...

Проблема с ООП.

Тема в разделе "Сделайте за меня", создана пользователем GerGer, 2 сен 2019.

  1. GerGer

    GerGer Новичок

    С нами с:
    2 сен 2019
    Сообщения:
    1
    Симпатии:
    0
    Добрый день,
    Прошу подсказать где можно подчерпнуть информацию по данному вопросу.
    Я пишу программу для добавления и отображения продуктов .
    Суть в том что должно быть оформлено так:
    Есть абстрактный класс Product у которого есть переменные
    Код (Text):
    1.     public $id;
    2.     public $sku;
    3.     public $name;
    4.     public $price;
    5.     public $category_id;
    6.     public $timestamp;
    У этого класса будет три наследника и у каждого их них будет специальный атрибут.
    На данный момент у меня написано так что все переменные находятся в классе Product.
    Как правильно создать подкласс в данном случае? (Код внизу.)
    Буду очень благодарен любой информации по данному вопросу.
    PHP:
    1. <?php
    2. abstract class Product{
    3.     // database connection and table name
    4.     private $conn;
    5.     private $table_name = "products";
    6.     // object properties
    7.     public $id;
    8.     public $sku;
    9.     public $name;
    10.     public $price;
    11.     public $category_id;
    12.     public $size;
    13.     public $weight;
    14.     public $height;
    15.     public $lenght;
    16.     public $width;
    17.     public $timestamp;
    18.  
    19.     public function __construct($db){
    20.         $this->conn = $db;
    21.     }
    22.     // create product
    23.     function create(){
    24.         //write query
    25.         $query = "INSERT INTO
    26.                    " . $this->table_name . "
    27.                SET
    28.                    sku=:sku, name=:name, price=:price, category_id=:category_id, created=:created";
    29.         $stmt = $this->conn->prepare($query);
    30.         // posted values
    31.         $this->sku=htmlspecialchars(strip_tags($this->sku));
    32.         $this->name=htmlspecialchars(strip_tags($this->name));
    33.         $this->price=htmlspecialchars(strip_tags($this->price));
    34.         $this->category_id=htmlspecialchars(strip_tags($this->category_id));
    35.         $this->size=htmlspecialchars(strip_tags($this->size));
    36.         $this->weight=htmlspecialchars(strip_tags($this->weight));
    37.         $this->height=htmlspecialchars(strip_tags($this->height));
    38.         $this->lenght=htmlspecialchars(strip_tags($this->lenght));
    39.         $this->width=htmlspecialchars(strip_tags($this->width));
    40.         // to get time-stamp for 'created' field
    41.         $this->timestamp = date('Y-m-d H:i:s');
    42.         // bind values
    43.         $stmt->bindParam(":sku", $this->sku);
    44.         $stmt->bindParam(":name", $this->name);
    45.         $stmt->bindParam(":price", $this->price);
    46.         $stmt->bindParam(":category_id", $this->category_id);
    47.         $stmt->bindParam(":size", $this->size);
    48.         $stmt->bindParam(":weight", $this->weight);
    49.         $stmt->bindParam(":height", $this->height);
    50.         $stmt->bindParam(":lenght", $this->lenght);
    51.         $stmt->bindParam(":width", $this->width);
    52.         $stmt->bindParam(":created", $this->timestamp);
    53.         if($stmt->execute()){
    54.             return true;
    55.         }else{
    56.             return false;
    57.         }
    58.     }
    59.  
    60.     function readAll($from_record_num, $records_per_page){
    61.         $query = "SELECT
    62.                    id , sku, name, price, category_id, size, weight, height, lenght, width
    63.                FROM
    64.                    " . $this->table_name . "
    65.                ORDER BY
    66.                    name ASC
    67.                LIMIT
    68.                    {$from_record_num}, {$records_per_page}";
    69.    
    70.         $stmt = $this->conn->prepare( $query );
    71.         $stmt->execute();
    72.    
    73.         return $stmt;
    74.         }
    75.         // used for paging products
    76.         public function countAll(){
    77.    
    78.         $query = "SELECT id FROM " . $this->table_name . "";
    79.    
    80.         $stmt = $this->conn->prepare( $query );
    81.         $stmt->execute();
    82.    
    83.         $num = $stmt->rowCount();
    84.    
    85.         return $num;
    86.     }
    87.    
    88.         // delete the product
    89.         function delete(){
    90.        
    91.             $query = "DELETE FROM " . $this->table_name . " WHERE id = ?";
    92.            
    93.             $stmt = $this->conn->prepare($query);
    94.             $stmt->bindParam(1, $this->id);
    95.        
    96.             if($result = $stmt->execute()){
    97.                 return true;
    98.             }else{
    99.                 return false;
    100.             }
    101.         }
    102. }
    103. ?>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    у вас в коде множество ошибочных нюансов. Я даже не знаю с чего начинать / равноценно потраченному времени на то что вы даже и не поймете.

    Начните с актуального синтаксиса прописывания методов в классе.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    public писать перед методами требует не PHP, а PSR, не одно и то же :)
     
    acho нравится это.