Я знаю, что это не отвечает на ваш вопрос, но так как вы пометили это как PHP, я собираюсь предположить, что он почти наверняка будет применяться с некоторой моделью базы данных.
В этом случае, вероятно, лучше вообще отказаться от «коллекций», поскольку, если бы вы заставили каждый класс представлять только один объект, например, если вы хотите просмотреть 10 сообщений в блоге, вы бы вызвали 10 отдельных SELECT. запрашивает каждый, получая только отдельную запись в базе данных, потому что вы решили, что класс BlogPost инкапсулирует его метод поиска.
Альтернатива состоит в том, чтобы позволить классу представлять одну или несколько записей. Таким образом, вам нужно выполнить только один запрос SELECT, независимо от того, извлекаете ли вы 5000 записей или только одну. Практически каждый объектно-реляционный картограф делает это.
При выполнении объектно-ориентированного программирования лучше думать с точки зрения поведения или ответственности , чем того, является ли объект осязаемой «вещью». В этом проблема теоретического обсуждения ООП. Очень заманчиво использовать аналогии, такие как животные и фрукты, которые имеют мало отношения к программированию в реальном мире.