Зачем класс 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;
}
}