Search
Zakládáte nový projekt, ve kterém bude veškerá funkcionalita zabalena do tříd a rozhraní. Zajistěte, aby načítání tříd bylo automatické bez nutnosti psát explicitní direktivy include, include_once resp. require a require_once. Nápověda:
Předpokládejme, že chcete napsat obecný e-shop. Budete prodávat zboží, které má jednoznačné ID, Cenu a DPH sazbu. Navrhněte rozhraní pro typ Zbozi. Jak ho namodelujete? Vytvořte alespoň dva rozdílné druhy zboží, například vzducholodě (Objem, Nosnost, Dostup) a knihy (Autor, Název, ISBN). Jak se liší? Co mají společného?
Do systému zařaďte níže uvednou třídu AbstraktniKosik, která z velké části implementuje košík pro jednoho uživatele systému. Implementujte vlastni třídu SessionKosik, která uloží obsah košíku do session prostoru.
abstraktnikosik.php
<?php // abstaktni trida pro kosik abstract class AbstraktniKosik { protected $zbozi; // pole zbozi protected $mnozstvi; //pole poctu kusu public function __construct() { $this->zbozi = array(); $this->mnozstvi = array(); } public function pridej(Zbozi $co, $kolik) { $kolik = intval($kolik); if ($kolik <= 0) return; foreach ($this->zbozi as $klic => $zbozi) { if ($co->getID() == $zbozi->getID()) { $this->mnozstvi[$klic] += $kolik; return; } } $this->zbozi[] = $co; $this->mnozstvi[] = $kolik; } public function odeber (Zbozi $co, $kolik) { $kolik = intval($kolik); if ($kolik <= 0) return; foreach ($this->zbozi as $klic => $zbozi) { if ($zbozi->getID() == $co->getID()) { $aktualni_pocet = $this->mnozstvi[$klic]; if ($aktualni_pocet-$kolik <= 0) { unset($this->zbozi[$klic]); unset($this->mnozstvi[$klic]); } else { $this->mnozstvi[$klic] -= $kolik; } } } } // ulozi obsah kosiku public abstract function uloz(); //nacte obsah ulozeneho kosiku public abstract function nacti(); } ?>
Rozšiřte SessionKosik tak, aby z této třídy nebylo možné vyrobit více než jednu instanci. Nápověda:
Odpovězte na otázku:
Váš projekt je třeba rozšířit o komponenty, které budou “poslouchat” nad událostmi nad košíkem. Takových komponent může být libovolné množství, všechny mají ale společnou vlastnost a to, že zpracovávají košíkové události.