我建議你把屬於車邏輯的所有代碼到一個類它自己的。然後,您可以使用它作爲代碼中的門面:
// initialize session for Cart
$_SESSION['cart'] || $_SESSION['cart'] = new Cart();
// fetch cart from session
$cart = $_SESSION['cart'];
然後通過提供車,提供你正在尋找的功能,無論是在一個簡單的形式方法:
$cart->increadeByOne($item);
或者給予更加分化的水平的封裝完全訪問:
$cart->getItem($item)->getQuantity()->increaseBy($number);
最後的這個例子似乎是臃腫,但一般它的好,有一個基類Cart
這樣你就可以貝特處理並測試您的操作。
然後,您可以綁定與您的GET請求:
if (isset($_GET['increase1']))
{
$cart->getItem($_GET['increase1'])->getQuantity->increaseByOne();
}
有些粗糙車和數量佈局:
Class CartItemQuantity
{
private $item;
private $quantity = 0;
public function __construct(CartItem $item)
{
$this->item = $item;
}
public function increaseByOne()
{
$this->increaseBy(1);
}
public function decreaseByOne()
{
$this->quantity = max(0, $this->quantity - 1);
}
public function increaseBy($number)
{
$this->quantity = max(0, $this->quantity + $number);
}
public function getQuantity()
{
return $this->quantity;
}
public function setQuantity($quantity)
{
if (is_string($quantity) && ctype_digit($quantity))
{
$quantity = (int) $quantity;
}
if (!is_int($quantity))
{
throw new InvalidArgumentException('Not a valid quantity (%s).', $quantity);
}
$this->quantity = max(0, $quantity);
}
}
Class CartItem
{
private $quantity;
...
public function __construct()
{
$this->quantity = new CartItemQuantity($this);
...
}
public function getQuantity()
{
return $this->quantity;
}
}
Class CartItems
{
...
/**
* @return CartItem
*/
public function getItem($item)
{
...
return $item;
}
}
Class Cart
{
/**
* @var CartItems
*/
private $items;
...
public function increaseByOne($item)
{
$this->items->getItem($item)->getQuantity()->increaseByOne();
}
/**
* @return CartItem
*/
public function getItem($item)
{
return $this->items->getItem($item);
}
}
,而不是讓你應該使用POST方法。 否則先搜索爬蟲找到你的店鋪將是第一個購買你所有的股票。 – 2012-02-25 13:48:44