Предисловие/вода
У меня в проекте методы классов часто возвращают массивы данных, например, список товаров.
В таком виде:
$products = [
"product-1" => [...],
"product-2" => [...]
];
При работе, начал сталкиваться с разными ошибками, неудобством работы с массивом и т.д., тем более, это не соответствует методологии OOП.
Первым делом я реализовал класс, ProductItem
.
Теперь все проще. У меня массив объектов ProductItem
.
И метод у меня выглядит таким образом:
// для примера
public function getProducts() : array {
...
return [
new ProductItem(...),
new ProductItem(...),
];
}
Возвращаемый тип метода getProducts
- массив.
Другим разработчикам не сразу понятно, что за массив?
Вероятно, для решения проблемы нужно создать коллекцию объектов getProducts
.
Вопрос Хотелось бы иметь возможность быстро создавать коллекции разных типов (коллекция не должна быть универсальной).
Минимальные требования к коллекции: Iterable
и Countable
.
Возможно, нужно создать абстрактную коллекцию, где будут реализованы Iterable
и Countable
интерфейсы, и описаны какие-то методы для работы с коллекцией (get
, has
, delete
).
После чего, я бы смог создать свой класс ProductItemsCollection
унаследовав от абстрактной коллекции.
И иметь готовую коллекцию объектов, в котором могли бы быть только классы типа getProducts
, при попытке запихнуть другой объект - исключение.
Подскажите пожалуйста, может у кого-то есть готовые примеры, или кто-то поможет грамотно реализовать такое ?
Если уж Вы почувствовали необходимость воспользоваться библиотечными / шаблонными решениями в своей работе, то, может быть, сделаете еще один небольшой "шаг вперед" - воспользуетесь одним из распространенных фреймворков, в котором эти библиотеки уже имеются, и отпадет потребность "изобретать велосипед"? (Хотя лично я тот еще любитель велосипедить... :) ) Необходимая Вам коллекция имеется, например, в Laravel и в Symfony.
IMHO: Laravel имеет более низкий порог вхождения и более дружелюбен к изучению "с колес", по мере необходимости. Symfony же - это даже не "ящик с инструментами", это - огромная мастерская с кучей инструментов, станков и приспособлений, для правильного применения которых нужно уже достаточно много понимать и иметь опыт практического применения.
Другим разработчикам не сразу понятно, что за массив? Вероятно, для решения проблемы нужно создать коллекцию объектов getProducts.
Поскольку PHP язык слабо типизированный, то решении проблемы - это PHPDoc. Указать возвращаемый тип в комментарии:
/**
* @return ProductItem[]
*/
Не вижу смысла в создании отдельного класса коллекции для каждой сущности.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем доброго времени суток, недавно начал изучать php7 по учебнику, и я столкнулся с такой проблемой (Fatal error), и не могу понять, что же я сделал...
Нужно, что-бы логотипы были рядом друг с другом(шли в ряд)