Страница 1 из 1

Про ООП

СообщениеДобавлено: 05 янв 2014, 00:44
guyasyou
Хочу переделать магазин в
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
. он там сделан больше в процедурном виде.

Проблема в том, что продается услуга, и она может быть 2х видов:
1)команда в консоль игрового сервера
2)исполнить определенный код PHP
(либо то или другое должно исполниться при успешной покупке)

для каждого товара код или команда разные.
Думал реализовать как то так: Создать некий абстрактный класс товара, а его будут наследовать классы конкретных товаров. В классе параметры товара: название, цена, и методы- команда в консоль и исполняемый скрипт.
Но возникают вопросы... Как делать список товаров, не проходиться же по файлам? Как обращатся к методу конкретного товара после успешной покупки. и т.п.

В верном ли направлении иду?
Как это можно реализовать?

Re: Про ООП

СообщениеДобавлено: 05 янв 2014, 13:54
cmsservice
В общих чертах идешь правильной дорогой. У абстрактного класса товара делаешь метод который будет вызываться после того как оплата подтверждена. Например PaymentSuccess(). В наследниках определяешь, что этот метод должен делать, т.е. для первого класса товара определяешь выполнение команды, а для второго - код (по сути тоже команда, но кастомная).

При покупке передаешь класс конкретного товара, который создается соответствующим кодом, отвечающим за биллинг. Т.к. этот код знает о методах родительского класса, то он их и вызывает, а конкретная реализация предоставляется соответствующим классом. Это же азы. Если возникают такие вопросы, то ИМХО сначала стоит почитать внимательно про основы ООП безотносительно языка программирования.

Re: Про ООП

СообщениеДобавлено: 05 янв 2014, 16:16
guyasyou
Я кстати читал Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования, но как то без практики не очень ясно.
Какой конкретно шаблон тут подойдет? Поразбираю его

Re: Про ООП

СообщениеДобавлено: 05 янв 2014, 20:07
guyasyou
Я правильно понял суть?

Код: Выделить всё
<?php
abstract class Product {
   protected $handle;
   protected $name;
   protected $description;
   protected $price;
   
   abstract protected function success($param = false);
   
   public function toConsole($command) {
      if (string($command)) {
         echo 'Отправлено в консоль: '.$command;
      }
   }
}

class FirstProduct extends Product {
   public $handle = 'First';
   public $name = 'Первый продукт';
   public $description = 'Описание первого продукта';
   public $price = '25';
   
   public function success($param = false) {
      echo 'Услуга реализована';
   }
}

class TwoProduct extends Product {
   public $handle = 'Two';
   public $name = 'Второй продукт';
   public $description = 'Описание второго продукта';
   public $price = '13';
   
   public function success($param = false) {
      echo 'Услуга реализована';
   }
}

class ProductFactory {
   public function getProductByHandle($handle) {
      $handle = $handle.'Product';
      return new $handle;
   }
}

$product = new ProductFactory;
$product = $product->getProductByHandle('Two');
var_dump($product);


Имена классов товаров будет хранится в бд. Я взял этот пример с методов оплаты в eConmmerce. Там метод устанавливаешь(в бд хандл прописывается) а потом по ней он грузит файл и класс.

Re: Про ООП

СообщениеДобавлено: 05 янв 2014, 22:04
cmsservice
Ну да, в общих чертах так :)