ООП классы и внешние списки данных - PullRequest
2 голосов
/ 05 декабря 2011

При программировании ОО в PHP я никогда точно не знаю, как отобразить класс на простые списки данных. Я постараюсь сделать простой пример, с которым я сталкиваюсь каждый день:

Сначала таблица MySQL создает:

/* create product table */
CREATE TABLE `product` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `description` text COLLATE utf8_unicode_ci,
 `price` decimal(10,0) NOT NULL,
 `brand` int(11) NOT NULL,
 `deliverytime` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

/* data list for all kind of brands */
CREATE TABLE `brand` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `brand` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

/* brand data*/
insert  into `brand`(`id`,`brand`) values (1,'nike'),(2,'adidas'),(3,'diesel'),  (4,'dkny'),(5,'lacoste');

/* data list for deliverytime */
CREATE TABLE `deliverytime` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deliverytime` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

/* deliverytime data */
insert  into `deliverytime`(`id`,`deliverytime`) values (1,'1 day'),(2,'2 days'),(3,'3 days'),(4,'4 days'),(5,'5 days'),(6,'6 days'),(7,'1 week'),(8,'1 - 2 weeks'),(9,'2 - 3 weeks'),(10,'4 - 5 weeks');

Затем я создаю класс продукта.

  class Product{
    private 
    $name,
    $description,
    $price,
    $brand
    $deliverytime;

    public function __construct(){
       // etc etc
    }

    public function save(){
       // save the product
    }
   }

Теперь большие вопросы:

Как мне обращаться с $ brand и $ deliverytime в моем классе Product? Должен ли я создать объект Brand и DeliveryTime (который, в свою очередь, отвечает за выбор нужного бренда и / или времени доставки)?

А как насчет сохранения объекта Product? Как мне обрабатывать данные о бренде и времени доставки?

Какова лучшая практика или шаблон для решения подобных ситуаций?

Извините за этот вопрос, но я не был уверен, где искать (теги для поиска): /

EDIT:

Хорошо, допустим, я не хочу использовать что-то вроде структуры ORM (Doctrine, dORM, redbean и т. Д.), Так как это было бы гигантским излишним для моей маленькой системы + я действительно хочу знать, как создать отображение самостоятельно для целей обучения. ... есть предложения?

1 Ответ

0 голосов
/ 05 декабря 2011

Это стиль, который мне нравится использовать

class ProductModel {
    public function find($id) {
         // fetch product with your database code using parameters to filter

         $product = new ProductEntity(
             // initialize with non foreighn values (eg. $row->id, $row->name)
             new ProductBrandEntity($row->brand_id, $row->brand_name); // available because you joined brand??
             new ProductDeliveryTime(/* initialize */)
         );

         return $product;
    }
}

Мне нравится вызывать объект из Сущностей базы данных, но вы можете называть их как хотите. Это в основном то, что вы предложили в своем вопросе, но я предпочитаю иметь Модель (из MVC) для инициализации сущностей, а не сущностей инициализировать себя. Вам следует изучить ORM и ActiveRecord, потому что эта работа в основном уже для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...