Формы и объекты в массивах

#php #oop

Вопрос:

Я изучаю ООП на PHP, и в упражнении я не знаю, как отправлять данные формы объектам и вводить объекты в массив. Я просматривал множество учебных пособий и форумов на Youtube, но не мог найти или понять многого.

В упражнении сначала запрашивается класс для управления продуктами супермаркета, атрибутами которого являются цифровой ключ, описание, цена и акции. Он также просит меня определить конструктор с параметрами в качестве методов.

 <?php
class Product{

private $key;
private $description;
private $price;
private $stock;

public function __construct($key, $description, $price, $stock){
    $this->key = $key;
    $this->description = $description;
    $this->price = $price;
    $this->stock = $stock;
}
public function setKey($key){
    $this->key = $key;
}
public function getKey(){
    return $this->key;
}
public function setDescription($description){
    $this->description = $description;
}
public function getDescription(){
    return $this->description;
}
public function setPrice($price){
    $this->price = $price;
}
public function getPrice(){
    return $this->price;
}
public function setStock($stock){
    $this->stock = $stock;
}
public function getStock(){
    return $this->stock;
}
}
 

Затем он просит меня использовать этот класс для объявления массива объектов и управления запасом до 50 товаров с помощью метода POST. Кроме того, в этой программе должно быть меню со следующими пунктами: Добавить продукт, Удалить продукт, Перечислить продукт, Отсортировать продукт по номеру ключа и выйти.

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
</head>
<body>
    <form method="post">
      <label for="key">Enter product key</label></br>
      <input type="number" name="key" id="key" required></br>

      <label for="description">Enter product description</label></br>
      <input type="text" name="description" id="description" required></br>

      <label for="price">Enter product price</label></br>
      <input type="text" name="price" id="price" required></br>

      <label for="stock">Enter the stock of the product</label></br>
      <input type="number" name="stock" id="stock" required></br>

      <button type="submit" name="add" id="add">Add product</button>
      <button type="submit" name="baja" id="baja">Remove product</button>
      <button type="submit" name="list" id="list">List product</button>
      <button type="submit" name="Sort" id="Sort">Sort product</button>
      <button type="submit" name="exit" id="exit">Exit</button>
  </form>
</body>
</html> 

Вот в чем проблема: я не знаю, как вставить объект в массив, не удалив предыдущие, и я не знаю, как распечатать все введенные объекты.

 <?php
if (strlen(session_id()) < 1) {
session_start();
}
include_once("product.php");

if(isset($_POST["add"])){
   $_SESSION["quantity"] = $_SESSION["quantity"]  1;
   $quantity = $_SESSION["quantity"];
   if($quantity<=50){
      $oproduct = new Product($_POST["key"], $_POST["description"], $_POST["price"], 
      $_POST["stock"]);
      $oproduct->setKey($_POST["key"]);
      $oproduct->setDescription($_POST["description"]);
      $oproduct->setPrice($_POST["price"]);
      $oproduct->setStock($_POST["stock"]);
      $_SESSION["prod"]= $oproduct;
      print_r($_SESSION["prod"]);
    }
  }
 

Ответ №1:

Динамически добавляйте [] новый продукт в массив:

 $_SESSION["prod"][] = $oproduct;
 

Или вы могли бы использовать key , если он уникален:

 $_SESSION["prod"][$_POST["key"]] = $oproduct;
 

Кроме того, похоже, что вы уже добавили информацию здесь:

 $oproduct = new Product($_POST["key"], $_POST["description"], $_POST["price"], $_POST["stock"]);
 

Так зачем ты это делаешь?

   $oproduct->setKey($_POST["key"]);
  $oproduct->setDescription($_POST["description"]);
  $oproduct->setPrice($_POST["price"]);
  $oproduct->setStock($_POST["stock"]);