[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите разобраться с коллекциями
abdula81
Подскажите, на моём примере, как делать такой объект, как Коллекция?

Есть класс Product, метод всего один getById. Возвращает массив товаров, либо пустой массив (в случае не найденных данных).

class Product
{
public function getById(array $a){
//"SELECT * FROM `products` where `id` IN (".implode(', ', $a).")";
//...

return $data;
}
}



Есть второй класс ProductSearch, с методами: поиск по имени, бренду и тд. Выводит также массив ID-шников этих товаров.

class ProductSearch
{
public function getByName($str){
//"SELECT `id` FROM `products` where `name` LIKE ....";
//...

return $data;
}

public function getByVendor($str){
//"SELECT `id` FROM `products` where `vendor` = $str";
//...

return $data;
}
}



Этот массив номеров я передаю в главный класс Product и получаю уже нужный массив данных товаров.

$product = new Product();

$productSearch = new ProductSearch();
$result = $productSearch->getByVendor('Sony');

$products = $product->getById($result );



Ребята говорят, не делай мозг, сделай коллекцию, тоже самое по сути и гораздо удобней.
Но сколько бы я не читал, никак не пойму, как она мне может помочь.
twin
Коллекция на то и коллекция, что по сути это набор однотипных объектов. Ты не оперируешь объектами, ты оперируешь данными. Ты ни где не возвращаешь объекты.

Вообще это большая глупость, использовать объекты при чтении. Но сейчас это крайне модно, это махровое ООП, потому тебе это и говорят.

В твоем случае коллекция может выглядеть как то так:
class Product
{
private $id;
private $name;
private $vendor;
//other properties

public function __construct($id, $name, $vendor)
{
$this->id = $id;
$this->name = $name;
$this->vendor = $vendor;
}
}



class ProductCollection
{
private $collect = [];

public function getByName($str)
{
//"SELECT * FROM `products` where `name` LIKE ....";
// заполняем свойства

while(...) {
$this->collect[] = new Product($row['id'], $row['name'], $row['vendor']);
}

return $this->collect;
}

public function getByVendor($str)
{
//"SELECT * FROM `products` where `vendor` = $str";
// по аналогии

return $this->collect;
}
}

Но надо ли оно тебе?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.