Генераторы и итераторы в 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;
}
}
Полезные ссылки
Заключение
Генераторы и итераторы позволяют приложению эффективно обрабатывать данные, уменьшая их загрузку в память. Они полезны при работе с большими данными, файлами и стримингом. Надеюсь, этот гайд был полезен! 🚀