Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class drink
- {
- private $alcool = '';
- private $pourcent = 0;
- public function __construct($alcool, $pourcent)
- {
- $this->alcool = $alcool;
- $this->pourcent = $pourcent;
- }
- public function __toString()
- {
- return $this->alcool . ': ' . $this->pourcent . '%';
- }
- public function getPourcent()
- {
- return $this->pourcent;
- }
- public function getAlcool()
- {
- return $this->alcool;
- }
- }
- class drinks implements iteratorAggregate
- {
- private $drinks = array();
- public function destroy()
- {
- $this->drinks = array();
- }
- public function add(drink $drink)
- {
- $this->drinks[] = $drink;
- return $this;
- }
- public function getIterator()
- {
- return new arrayIterator($this->drinks);
- }
- }
- class order
- {
- private $numberOfDrinks = 0;
- private $alcool = '';
- private $isPaid = false;
- public function __construct($numberOfDrinks, $alcool)
- {
- $this->numberOfDrinks = $numberOfDrinks;
- $this->alcool = $alcool;
- }
- public function increaseNumberOfDrinks()
- {
- $this->numberOfDrinks++;
- return $this;
- }
- public function getNumberOfDrinks()
- {
- return $this->numberOfDrinks;
- }
- public function getAlcool()
- {
- return $this->alcool;
- }
- public function getPrice()
- {
- return $this->numberOfDrinks * 6;
- }
- public function isPaid()
- {
- return $this->isPaid;
- }
- public function setPaid($boolean)
- {
- $this->isPaid = $boolean;
- return $this;
- }
- }
- class client
- {
- private $drinks = array();
- private $creditCardNumber = '';
- public function __construct()
- {
- $this->creditCardNumber = uniqid();
- }
- public function order($numberOfDrinks, $alcool)
- {
- return new order($numberOfDrinks, $alcool);
- }
- public function receiveDrinks(drinks $drinks)
- {
- foreach($drinks as $drink )
- {
- $this->drinks[] = $drink;
- }
- return $this;
- }
- public function getCreditCardNumber()
- {
- return $this->creditCardNumber;
- }
- public function showDrinks()
- {
- foreach ($this->drinks as $drink)
- {
- echo $drink . PHP_EOL;
- }
- return $this;
- }
- }
- class tpe
- {
- private $creditCardNumber = '';
- private $price = 0;
- public function setCreditCardNumber($creditCardNumber)
- {
- $this->creditCardNumber = $creditCardNumber;
- return $this;
- }
- public function setPrice($price)
- {
- $this->price = $price;
- return $this;
- }
- public function executeTransaction(order $order)
- {
- echo 'Just pay ' . $order->getPrice() . ' with card ' . $this->creditCardNumber . '!' . PHP_EOL;
- $order->setPaid(true);
- return $this;
- }
- }
- class barman
- {
- private $order = null;
- private $drinks = null;
- public function receiveOrder(order $order)
- {
- if( $this->order && !$this->order->isPaid())
- {
- throw new \RuntimeException('Je dois en premier me faire payer la commande en court');
- }
- $this->order = $order;
- return $this;
- }
- public function prepareOrder()
- {
- $this->drinks = new drinks();
- for ($numberOfDrinks = $this->order->getNumberOfDrinks(); $numberOfDrinks > 0; $numberOfDrinks--)
- {
- $this->drinks->add(new drink($this->order->getAlcool(), 75));
- }
- return $this;
- }
- public function giveDrinks()
- {
- // le barman ne les a plus donc on les lui retire
- $drinks = $this->drinks;
- $this->drinks = null;
- return $drinks;
- }
- public function billDrinks($client)
- {
- $tpe = new tpe();
- $tpe
- ->setCreditCardNumber($client->getCreditCardNumber())
- ->executeTransaction($this->order)
- ;
- return $this;
- }
- }
- $me = new client();
- $barman = new barman();
- $barman
- ->receiveOrder($me->order(5, 'Chimay bleu'))
- ->prepareOrder()
- ;
- $me->receiveDrinks($barman->giveDrinks());
- $barman->billDrinks($me);
- $me->showDrinks();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement