---
title: "Iterator - контроль обходу"
url: https://laravelukraine.com/blog/iterator-kontrol-obxodu
author: "Олексій Бабінцев"
date: 2026-07-17
---

# Iterator - контроль обходу

Iterator надає уніфікований спосіб послідовного обходу елементів колекції, не розкриваючи її внутрішню структуру.

### Яку проблему вирішує

Різні структури (масив, дерево, потоковий ресурс) обходяться по-різному. Якщо клієнт знає про внутрішню будову колекції, він прив'язується до неї, а лінива обробка великих наборів без завантаження всього в пам'ять стає неможливою.

### Як вирішує

Колекція надає ітератор, який інкапсулює логіку обходу. Клієнт працює через `foreach`, не знаючи, що всередині. У PHP патерн вбудований у мову: інтерфейси `Iterator` та `IteratorAggregate`, а також генератори (`yield`), які ліниво віддають елементи без завантаження всієї колекції у пам'ять.

```php
class UserCollection implements IteratorAggregate
{
  public function __construct(private array $items) {}

  public function getIterator(): Traversable
  {
    foreach ($this->items as $item) {
      if ($item->is_active) {
        yield $item;
      }
    }
  }
}

$activeUsers = new UserCollection($users);
foreach ($activeUsers as $user) {
  // ...
}
```

### Де застосовувати

- Лінива ітерація над великими наборами: у Laravel часто достатньо `LazyCollection` (обгортка над генераторами для обробки мільйонів рядків без OOM).
- Власний ітератор - коли потрібен специфічний порядок обходу або доменна логіка фільтрації, як у прикладі вище.

### Плюси та мінуси

- **+** Клієнт обходить колекцію, не знаючи її внутрішньої структури.
- **+** Генератори дають ліниву обробку без зайвої пам'яті.
- **−** Власний ітератор - зайвий код для звичайного масиву чи `Collection`.
- **−** Стандартних інструментів PHP/Laravel вистачає у більшості випадків.
