Итерация по объектам в PHP с использованием интерфейсов Iterator и IteratorAggregate

PHP поддерживает мощный механизм итерации, позволяющий работать с объектами, как с массивами, с помощью цикла foreach. Это становится возможным благодаря интерфейсу Iterator и IteratorAggregate.

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

Что такое итерируемые объекты?

Итерируемый объект — это объект, который можно перебирать в цикле foreach. Чтобы объект стал итерируемым, нужно реализовать один из двух интерфейсов:

  • Iterator — реализуется вручную (с методами current(), next(), key(), valid(), rewind())
  • IteratorAggregate — возвращает объект, который реализует Traversable

Пример из жизни: список задач сотрудника

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

Результат:

  • Подготовить отчет
  • Позвонить клиенту
  • Заполнить анкету

Еще пример: корзина интернет-магазина

Вы создаете корзину, где каждая позиция — это объект. Хотите, чтобы корзина была максимально гибкой, но выглядела как массив.

Когда итерируемые объекты особенно полезны?

  • Когда структура данных сложнее обычного массива
  • Когда нужно инкапсулировать логику (например, фильтрация или сортировка внутри объекта)
  • Когда нужно работать с большими данными, подгружаемыми по частям

Итерируемые объекты — это способ сделать ваш код в PHP читаемее и более объектно-ориентированным. Это особенно удобно, если вы работаете над системой, где много однотипных данных — задачи, товары, заказы, пользователи. Благодаря Iterator и IteratorAggregate можно работать с объектами как с массивами, при этом сохраняя контроль над внутренней логикой.