Генераторы и итераторы в PHP

Генераторы и итераторы в PHP

Введение

PHP поддерживает два подхода для постепенной обработки данных: итераторы и генераторы. Эти механизмы позволяют обрабатывать большие наборы данных без потребления залишних ресурсов.


Итераторы в PHP

Итератор, возвращающий только четные числа

class EvenNumbersIterator implements Iterator {
    private $numbers;
    private $position = 0;

    public function __construct(array $numbers) {
        $this->numbers = $numbers;
        $this->moveToNextEven();
    }

    public function current() {
        return $this->numbers[$this->position];
    }

    public function key() {
        return $this->position;
    }

    public function next() {
        $this->position++;
        $this->moveToNextEven();
    }

    public function rewind() {
        $this->position = 0;
        $this->moveToNextEven();
    }

    public function valid() {
        return isset($this->numbers[$this->position]);
    }

    private function moveToNextEven() {
        while (isset($this->numbers[$this->position]) && $this->numbers[$this->position] % 2 !== 0) {
            $this->position++;
        }
    }
}

Генераторы в PHP

Генератор чисел Фибоначчи

function fibonacci($limit) {
    $a = 0;
    $b = 1;
    
    for ($i = 0; $i < $limit; $i++) {
        yield $a;
        $temp = $a + $b;
        $a = $b;
        $b = $temp;
    }
}

Генератор для чтения CSV

function readCSV($filename) {
    $file = fopen($filename, "r");
    while (($row = fgetcsv($file)) !== false) {
        yield $row;
    }
    fclose($file);
}

Генератор факториала

function factorial($n) {
    $result = 1;
    for ($i = 1; $i <= $n; $i++) {
        $result *= $i;
        yield $result;
    }
}

Полезные ссылки


Заключение

Генераторы и итераторы позволяют приложению эффективно обрабатывать данные, уменьшая их загрузку в память. Они полезны при работе с большими данными, файлами и стримингом. Надеюсь, этот гайд был полезен! 🚀

Recent blogs
Структурные паттерны в программировании

Структурные паттерны в программировании

Порождающие паттерны в программировании

Порождающие паттерны в программировании

Объектно-ориентированное программирование в PHP

Объектно-ориентированное программирование в PHP

Структуры данных в PHP

Структуры данных в PHP

HTTP-методы

HTTP-методы