Показать сообщение отдельно
  #2 (permalink)  
Старый 22.04.2017, 14:48
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Зачем класс Product объявлен абстрактным?

<?
class Cart{
	/*
	 *	Ассоциативный массив. 
	 *	Ключ - название продукта, значение - экземпляр класса Product
	 */
    public $countProduct = [];
     
    public function addProduct($product){
		//Почему бы не isset?
        if(array_key_exists($product->title, $this->countProduct)){
			/*
			 *	Тут происходит увеличение кол-во продукта не в countProduct, 
			 *	а в переданном методу экземпляре класса
			 */
            $res =  $product->numberProduct = $product->numberProduct+ 1;
			/*
			 *	Чтобы происходило "запоминание" кол-во товара в корзине следует сделать так
			 *	$count=&$this->countProduct[$product->title]->numberProduct;//Получаю кол-во продукта
			 *	//Увеличиваю кол-во сохраненного продукта на 1 
			 *	и зачем-то присваиваю это значение свойству numberProduct переданного экземпляра
			 *	$product->numberProduct=++$count;
			 */
            echo 'Товар добавлен в корзину<br>';
            return $res;
        }
        else{
            $this->countProduct[$product->title] = $product;
            echo 'Товар добавлен в корзину<br>';
        }
         
    }
}

//Если бы мне нужно было сохранить этот принцип работы класса, то я бы его написал так
class Cart{
	static $products=array();
	
	public function addProduct(Product $product){
		$key=$product->title.' ~ '.$product->price;
		self::$products[$key]=isset(self::$products[$key])?
			(self::$products[$key]+$product->numberProduct):
			$product->numberProduct;
		
		return $this;
	}
}

Последний раз редактировалось Nexus, 22.04.2017 в 14:53.
Ответить с цитированием