require_once 'classes.php';
Перейти на Композер и неймспейсы
class smartPhoneProduct
Оставить Product, а тип товара вынести в свойство товара
type
или в
category
Все, что касается модификаций — вынести в характеристики, например может подойти
EAV, то есть некая сущность Характеристика с
product_id, name, value
и таких быть может много у одного товара. Или иной способ работы, главное чтобы при добавлении сотен характеристик вам не пришлось бы сотнями файлов классы придумывать и всегда был один Product, ну или были др причины создавать детей, например простой товар и цифровой...
Альтернативы EAV обсуждались например тут:
Альтернатива EAV, структура базы?
getProduct()
После исправления предыдущего шага данная штука product->getProduct() устранится, а сериализация должна быть в другом слое, товар не должен знать ничего про то, как отображать его, тк отображений может быть много (в каталоге, в письме, в отчетах, в корзине)
echo "\nСкидка: " .$discountOnProduct. "P";
echo — вывод, бизнес-объект не должен ничего знать про вывод, ответ сервера и прочее, должен быть просто
return $this->description()
Тем более цена не должна идти в описании, а быть неким getPrice(), причем как правило это делают не у товара, а у вариантов/предложений товара, которые с товаром связаны 1 к 1
Скидка не должна быть частью товара, чтобы ее можно было навешивать по разным правилам/стратегиям и ситуациям, это скорее часть корзины/заказа, крч отдельная сущность со своим поведением (размер, проценты или абсолютный размер, когда применять ее).
это основное... к код-стайлу пока претензии не имеют смысла