PHP OOP Корзина Класс отображения - PullRequest
2 голосов
/ 28 июня 2010

Я сделал класс корзины PHP ООП, как this

print_r($_SESSION["cart"]);

результат:

Array ( [1] => 1 [3] => 2 )

Как мне распечатать эту сессию, как "настоящую" корзину? пример:

echo "Your basket: ";
echo "ItemID: ".$cartid." Itemnumber:".$cartnumber;

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

if (isset($_POST['submit'])) 
{ 
$cart= new Cart(); 
$cart->add($_POST['id'],2); 
$item= $cart->getCart(); 
$_SESSION["cart"]=$cart;
}

Ответы [ 3 ]

0 голосов
/ 28 июня 2010

Способ установки кода в этом руководстве заключается в том, что индекс массива - это идентификатор элемента, а значение - количество, поэтому примерно так и следует это сделать:

echo 'Your basket:<br>';
foreach ($_SESSION['cart'] as $id => $quantity) {
    echo 'ItemID:' . $id . ' Itemnumber: ' . $quantity . '<br>';
}
0 голосов
/ 29 июня 2010
  1. $ _ SESSION - это просто массив.
  2. Массив хранится в $ _SESSION ['cart'].
  3. Кажется, вы перезаписываете этот массив, толькоНедавно добавленный элемент.

Например, этот код:

if (isset($_POST['submit'])) 
{ 
$cart= new Cart(); 
$cart->add($_POST['id'],2); 
$item= $cart->getCart(); 
$_SESSION["cart"]=$cart;
}

можно изменить на:

if (isset($_POST['submit'])) 
{ 
$_SESSION["cart"][$_POST['id']] = 2;
}

Теперь просто добавимв массив, сохраненный в $ _SESSION ['cart'].Обратите внимание, что он вообще не использует корзину.

Попробуйте:

if (isset($_POST['submit'])) 
{ 
$cart= new Cart($_SESSION["cart"]); // this should bring in the previous items
$cart->add($_POST['id'],2); // what is this magic number '2'? Quantity?  But where is it from?
$_SESSION["cart"] = $cart->getCart();
}

Редактировать: Еще несколько объяснений.

Конструктор класса корзины принимает параметрчто он хранит внутри:

private $cart;

function __construct($cart="") {
    $this->cart = $cart;
}

Если честно, это должно быть немного умнее:

private $cart;

function __construct($cart = array()) {
    if (is_array($cart))
    {
         $this->cart = $cart;
    }
    else
    {
         // maybe print some error, informing the developer that he's using the cart class incorrectly
         // or better yet, trigger a PHP warning:
         trigger_error('Cart class constructor expects an array parameter',      E_USER_WARNING);
    }
}

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

0 голосов
/ 28 июня 2010
<?php

function printCart($cartid, $cartnumber) {
    echo "ItemID: ".$cartid." Itemnumber:".$cartnumber;
    echo "<br />";
}

$a = array(1 => 1, 3 => 2);

array_walk($a, 'printCart');

См. array_walk .

...