I am a beginner in PHP and for the last 5 hours I have been researching on the subject. As I understand it, an iterator
allows us to read large amounts of data that happen to overflow the RAM memory, an example would be an analysis of large log files.
By using a mode called lazy in nature that reads one element at a time, you could read a 4GB file without having to load it all into memory. In theory, you could process an infinite amount of information.
For that we need to define some methods:
<?php
class myIterator implements Iterator {
private $position = 0;
private $array = array("A","B","C",);
public function __construct() {
$this->position = 0;
}
function rewind() {
$this->position = 0;
}
function current() {
return $this->array[$this->position];
}
function key() {
return $this->position;
}
function next() {
$this->position++;
}
function valid() {
return isset($this->array[$this->position]);
}
}
$it = new myIterator;
foreach($it as $key => $value) {
var_dump($key, $value);
echo "\n";
}
In PHP 7.1 this can be reduced to:
<?php
class myIterable {
function foo(iterable $iterable){
foreach ($iterable as $key => $value) {
var_dump($key, $value);
echo "\n";
}
}
}
$it = new myIterable;
$it->foo(array("A","B","C",));
Hope this helps ;)