Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
3 / 3 / 1
Регистрация: 24.03.2013
Сообщений: 304

Добавление и товара в корзину и удаление

12.04.2017, 14:56. Показов 8842. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такое задание:

Опишите класс Корзина, в которые можно передавать любой товар. Опишите у корзины нужные свойства и методы. Например метод получения суммы заказа, удаление товара из корзины и т.д.

Я вообще тут запутался, правильно ли я сделал добавление товара?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(-1);
 
 
interface getProduct{
    public function getName();
    public function getPrice();
}
 
interface Basket{
    public function getProduct();
    public function delProduct();
}
 
abstract class Product implements getProduct{
    private $name;
    private $price;
    
    public function __construct($name, $price){
        $this->name = $name;
        $this->price = $price;
    }
    
    public function getName(){
        return $this->name;
    }
    public function getPrice(){
        return $this->price;
    }
}
 
class Tablet extends Product{}
 
class Cart extends Tablet implements Basket{
    public function getProduct(){
        return $this->getName();
    }
    public function delProduct(){
        return $this->getName();
    }
    
}
 
$tablet = new Tablet('Asus', 3000);
$basket = new Cart($tablet->getName(), $tablet->getPrice());
 
echo $basket->getProduct();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2017, 14:56
Ответы с готовыми решениями:

Добавление товара в корзину
Всем доброго времени суток. У меня такой вопрос почему по нажатию кнопки не добавляется товар в таблицу при нажатии на кнопку? Дело вот в...

Исправить добавление товара в корзину
Помогите исправить код. На какую ссылку не нажми, по порядку в корзину добавляет все товары и потом постоянно последний товар... &lt;?php...

Добавление товара в корзину.
Добавление товара в корзину. День добрый. Вопрос жизни и смерти. У меня есть каталог с занесенными элементами. Есть страница на в...

7
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
12.04.2017, 15:18
Не правильно. У тебя в задании написано, что надо описать класс корзины, а ты его зачем-то интерфейсом сделал. Это должен быть отдельный класс. Совсем отдельный.
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
12.04.2017, 17:11
Не правильно, присоединяясь к andr-xw, добавлю что класс корзины еще и не должен наследоваться от класс товара.
0
3 / 3 / 1
Регистрация: 24.03.2013
Сообщений: 304
20.04.2017, 19:55  [ТС]
Я полностью изменил код.

Теперь осталась одна проблема, если добавлять одинаковые товары, то по логике свойство numberProduct должно увеличиваться на 1.

Оно увеличивается только 1 раз , но почему-то не сохраняется?

Помогите пожалуйста, я уже 3 часа мучаюсь.

23 строка

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
 
abstract class Product{
    public $title;
    public $price;
    public $numberProduct;
    
    public function __construct($title, $price, $numberProduct = 1){
        $this->title = $title;
        $this->price = $price;
        $this->numberProduct = $numberProduct;
    }
}
 
class Cart{
    public $countProduct = [];
    
    public function addProduct($product){
        $getProduct = '';
        
        if(array_key_exists($product->title, $this->countProduct)){
        
            $res =  $product->numberProduct = $product->numberProduct+ 1;
            echo 'Товар добавлен в корзину<br>';
            return $res;
            
        }
        else{
            $this->countProduct[$product->title] = $product;
            echo 'Товар добавлен в корзину<br>';
        }
        
    }
    
    public function deleteProduct($product){
        echo $product->title . ' удалён';
        unset($this->countProduct[$product->title]);
    }
}
 
class Planshet extends Product{}
 
$planshet = new Planshet('Asus', 2000);
$planshet2 = new Planshet('Lenovo', 3000);
$planshet3 = new Planshet('Lenovo', 3000);
$planshet4 = new Planshet('Lenovo', 3000);
$planshet5 = new Planshet('Lenovo', 3000);
 
 
$korzina = new Cart();
 
$korzina->addProduct($planshet); //добавляю товар в корзину
$korzina->addProduct($planshet2); //добавляю товар в корзину
$korzina->addProduct($planshet3); //добавляю товар в корзину
$korzina->addProduct($planshet4); //добавляю товар в корзину
$korzina->addProduct($planshet5); //добавляю товар в корзину
 
 
echo '<pre>';
var_dump($korzina->countProduct);
echo '</pre>';
 
$korzina->deleteProduct($planshet); //удаляю из корзины
 
echo '<pre>';
var_dump($korzina->countProduct);
Добавлено через 6 часов 33 минуты
Вот такая проблема, количество товаров нормально считает, а вот цену не правильно, если добавить 4 одинаковых товара, стоимостью 2000, то должно получится 8000, а получается 16 000, почему?

И почему не узнаётся цена добавленного товара?

Я же говорю ей, возьми общую цену у товаров, которые лежат в корзине и добавь к ним цену нового товара, а получается, что складывается общая цена и общая цена.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
 
abstract class Product{
    public $title;
    public $price;
    public $numberProduct;
    
    public function __construct($title, $price, $numberProduct = 1){
        $this->title = $title;
        $this->price = $price;
        $this->numberProduct = $numberProduct;
    }
}
 
class Cart{
    public $countProduct = [];
    
    public function addProduct($product){                                       
        
        if(array_key_exists($product->title, $this->countProduct)){
            $this->countProduct[$product->title]->numberProduct++;
            
            //$this->countProduct[$product->title]->price += 2000;
            
            $this->countProduct[$product->title]->price += $product->price;
    
        var_dump($product->price);
        
        echo 'Товар добавлен в корзину<br>';
        echo 'Количество ' . $product->numberProduct . '<br>';
        echo '<br>';
        
        }
        else{
            $this->countProduct[$product->title] = $product;
        }
    }
    
    public function showAllProduct(){ //показать список продуктов и количество
        foreach($this->countProduct as $key => $value){
            echo 'Товар ' . $key . ' количество ' . $value->numberProduct . '<br>';
        }
        echo '<pre>';
        var_dump($this->countProduct);
    }
}
 
class Planshet extends Product{}
 
$asus = new Planshet('Asus', 2000);
 
$korzina = new Cart();
 
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
 
$korzina->showAllProduct();
 
echo $asus->price;
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
20.04.2017, 20:39
Потому что ты информацию, относящуюся к корзине, хранишь в объекте продукта.

Добавлено через 5 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public function addProduct($product) {
        if (array_key_exists($product->title, $this->countProduct)) {
            $this->countProduct[$product->title]++;
            $this->totalPrice[$product->title] += $product->price;
    
            var_dump($product->price);
        
            echo 'Товар добавлен в корзину<br>';
            echo 'Количество ' . $this->countProduct[$product->title] . '<br>';
            echo 'На сумму ' . $this->totalPrice[$product->title] . '<br>';
            echo '<br>';
        
        } else {
            $this->countProduct[$product->title] = 1;
            $this->totalPrice[$product->title] = $product->price;
        }
    }
1
3 / 3 / 1
Регистрация: 24.03.2013
Сообщений: 304
20.04.2017, 22:17  [ТС]
Я сделал.

Создал такие методы:

1) Добавление продукта.
2) Добавление одинакового продукта
3) Удаление одного продукта
4) Удаление всех продуктов
5) Получение названия и количество продуктов
6) Получение общей цены всех продуктов

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
 
abstract class Product{
    public $title;
    public $price;
  
   
    public function __construct($title, $price){
        $this->title = $title;
        $this->price = $price;
    }
}
 
class Cart{
    public $countProduct = [];
   
    public function addProduct($product){                                      
       $product->numberProduct = 1; //если это убрать то тоже буде работать, только не будет учитывать первый
       
        if(array_key_exists($product->title, $this->countProduct)){
            $this->countProduct[$product->title]->numberProduct++;
        
            echo 'Товар добавлен в корзину<br>';
        }
        else{
            $this->countProduct[$product->title] = $product;
        }
    }
    
    public function deleteAllProduct($product){ //убрать все одинаковые продукты из корщины
        echo $product->title . ' удалён';
        unset($this->countProduct[$product->title]);
    }
    
    public function deleteOneProduct($product){ //убрать 1 одинаковый продукт
        if(array_key_exists($product->title, $this->countProduct)){
        
            if($this->countProduct[$product->title]->numberProduct > 0){
            
                 $this->countProduct[$product->title]->numberProduct--;
                 echo 'Товар ' . $this->countProduct[$product->title]->title. ' удалён из корзины<br>';
            } 
        }
    }
 
    public function showAllProduct(){ //показать список продуктов и количество
        $resCountProduct = 0;
        
        foreach($this->countProduct as $key => $value){
            echo 'Товар ' . $key . ', количество: ' . $value->numberProduct . '<br>';
            
            $resCountProduct = $resCountProduct + $value->numberProduct; 
            
            
        }
        
        echo 'Общее количество товаров: ' . $resCountProduct;
        
        
        /*
        echo '<pre>';
        var_dump($this->countProduct);
        */
    }
    
    public function sum(){ //подсчитать общую сумму продукта
        
        $res = 0;
        //var_dump($this->countProduct);
        
        foreach($this->countProduct as $key => $value){
            $res = $res + ($value->price * $value->numberProduct);
        }
        
        return $res;
        
    }
}
 
class Planshet extends Product{}
 
$asus = new Planshet('Asus', 2000);
$asus2 = new Planshet('Asus', 2000);
$asus3 = new Planshet('Asus', 2000);
$asus4 = new Planshet('Asus', 2000);
 
$lenovo = new Planshet('Lenovo', 3000);
$lenovo3 = new Planshet('Lenovo', 3000);
 
$korzina = new Cart();
 
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus2); //добавляю товар в корзину
$korzina->addProduct($asus3); //добавляю товар в корзину
$korzina->addProduct($asus4); //добавляю товар в корзину
 
$korzina->addProduct($lenovo); //добавляю товар в корзину
$korzina->addProduct($lenovo3); //добавляю товар в корзину
 
 
//$korzina->deleteOneProduct($asus); 
 
 
echo '<br>';
 
$korzina->showAllProduct();
 
 echo '<br>';
 echo '<br>';
echo 'На сумму: ' . $korzina->sum();
Добавлено через 4 минуты
andr-xw, Что такое totalPrice? У меня такого свойства нету
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
21.04.2017, 00:36
Цитата Сообщение от Dimon3x Посмотреть сообщение
andr-xw, Что такое totalPrice? У меня такого свойства нету
Ну так создай. То же, что и countProduct, только содержит не количество продуктов, а их общую стоимость.
0
0 / 0 / 0
Регистрация: 17.05.2023
Сообщений: 1
17.05.2023, 20:29
мой вариант
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
abstract class Tovar{
    private string $name;
    private int $price;
    public function __construct(string $name,int $price){
        $this->name = $name;
        $this->price = $price;
    }
   public function setName(string $name ) {
        $this->name = $name;
    }
    public function getName() :string {
        return $this->name;
    }
  public function SetPrice(int $price)  {
        $this->price=$price;
    }
    public function getPrice() :int {
        return $this->price;
    }
}
class Cart{
    private array $countProduct = [];
    public function addTovar(Tovar $product){                                      
       $product->numberProduct = 1;
      $this->countProduct[$product->getName()] = $product;
          echo 'Товар добавлен в корзину'."\n";
    }
    
    public function deleteAllTovar($product){ 
        unset($this->countProduct[$product->getName()]);
       echo 'очищено';
    }
    
    public function deleteOneTovar($product){
        if(array_key_exists($product->getName(), $this->countProduct)){
            if($this->countProduct[$product->getName()]->numberProduct > 0){
                 $this->countProduct[$product->getName()]->numberProduct--;
                 echo 'Товар ' . $this->countProduct[$product->getName()]->getName(). ' удалён из корзины'."\n";
            } 
        }
    }
 
    public function allTovar(){ 
        $resCountProduct = 0;
        foreach($this->countProduct as $key => $value){
            echo 'Товар ' . $key . ', количество: ' . $value->numberProduct . "\n";
            $resCountProduct = $resCountProduct + $value->numberProduct;
        }
        echo 'Общее количество товаров: ' . $resCountProduct ."\n";
        
    }
    public function sum(){ 
        $res = 0;
        foreach($this->countProduct as $key => $value){
            $res = $res + ($value->getPrice() * $value->numberProduct);
        }
        return $res;
    }
}
class Products extends Tovar{
  public function __construct(string $name ,int $price){
        parent:: __construct($name , $price);       
    }
}
class Odejda extends Tovar{
  private string $size;
  public function __construct(string $name ,int $price,string $size){
        parent:: __construct($name , $price); 
     $this->size = $size;
    }
  public function setSize(int $size) {
        $this->size= $size;
    }
    public function getSize() :int {
        return $this->size;
    }
}
class User {
   private string $firstName;
   private string $lastName;
    private int $telephone;
  private $cart;
 
public function __construct(string $firstName , string $lastName , int $telephone ) {
      $this->firstName = $firstName;
      $this->lastName = $lastName;
      $this->telephone = $telephone;
      $this->cart = new Cart;
    }
}
 
 
$hleb = new Products('Хлеб', 35);
$adidas = new Odejda('adidas', 1000,'S');
$korzina = new Cart();
 
$korzina->addTovar($hleb); 
$korzina->addTovar($adidas);
//$korzina->deleteOneTovar($hleb);
//$korzina->deleteAllTovar();
$korzina->allTovar();
echo 'сумма покупки:' . $korzina->sum();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2023, 20:29
Помогаю со студенческими работами здесь

Добавление товара в корзину
Ув. форумчане, помогите разобраться или подскажите где копать. Есть товар который продается по весу(кг) соответственно при добавлении...

Добавление товара в корзину
Здравствуйте. Есть два темплэйта: первый страница для заказа товара(товар подгружается с PostGRE), около товара есть кнопка добавить в...

Добавление товара в корзину
Привет Всем :) Как реализовать вот такую задачу(Не через CMS): Имеется список с товарами. Рядом кнопка &quot;Добавить&quot;. При...

Добавление товара в корзину
Здравствуйте! Имеется 2 файла index.jsp и cart.jsp. На index.jsp хранятся товары, в cart.jsp должна быть в дальнейшем сделана корзина....

Ajax добавление товара в корзину?
Приветствую! ПОдскажите пожалуйста, как реализовать добавление товара в корзину без обновления страницы. Пока что у меня нет просмотра...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru