<?php namespace CoR2; $promo = Promo::init(); $cart = new Cart(); $cart->setPromo($promo); $cart->add('A0001', 1); $cart->add('A0002', 2); $cart->add('B0001', 1); $cart->add('B0002', 2); $cart->add('C0001', 1); $cart->add('C0002', 2); $cart->calculate(); $cart->listAll(); echo $cart->getTotal(), "\n"; class Cart { protected static $_priceTable = ['A0001' => 100, 'A0002' => 150, 'B0001' => 300, 'B0002' => 200, 'C0001' => 200, 'C0002' => 200]; protected $_total = 0; protected $_items = []; protected $_promo = null; public function setPromo(Promo $promo) { $this->_promo = $promo; } public function add($sn, $quantity) { $price = static::$_priceTable[$sn]; $price = $this->_promo->calculate($sn, $price); $this->_items[$sn] = [$price, $quantity];