У меня есть фабрика под названием ProductFactory
Я могу создать продукт, подобный так:
$product = ProductFactory::getProduct($id);
Теперь, в зависимости от того, какой тип продукта мы получаем, эта функция может возвращать класс типа Product
или его потомка, или Product
.
Но, используя описанный выше метод, класс $product
будет отвечать за подключение к базе данных и извлечение ее данных.
Таким образом, если бы я выбрал 20 продуктов для отображения в списке категорий, мне сначала нужно было бы получить список всех идентификаторов, а затем вызвать вышеуказанную функцию 20 раз. Это будет 21 вызов в базу данных.
Итак, я добавил еще одну функцию на свой завод, например:
$product = ProductFactory::createProduct($data);
Это делает то же самое, за исключением того, что вы передаете данные из базы данных, избавляя класс $product
от необходимости совершать поездку. (в зависимости от того, какие данные вы передаете, фабрика вернет правильный тип класса).
Итак, теперь я хочу сделать один вызов, чтобы выбрать все данные о товарах, и FETCH_INTO
моя фабрика, чтобы сгенерировать объект $ product для каждой строки.
Как я могу это сделать?
обновление
Вот что я попробовал, чтобы не получилось:
$stmt->setFetchMode(PDO::FETCH_INTO,ProductFactory::createProduct);
foreach($stmt as $product)
{
echo get_class($product) . '<br>';
}