はIteratorAggregate
、外部 Iterator を作成するためのインターフェースです。
class myData implements IteratorAggregate
{
public $property1 = "Public property one";
public $property2 = "Public property two";
public $property3 = "Public property three";
public function __construct()
{
$this->property4 = "last property";
}
public function getIterator()
{
return new ArrayIterator($this);
}
}
$obj = new myData;
そして、次を使用してオブジェクトをトラバースできますforeach
。
foreach($obj as $key => $value) {
var_dump($key, $value);
echo "\n";
}
WhileIterator
は、外部反復子または内部で反復できるオブジェクトのインターフェイスです。
class myIterator implements Iterator
{
private $position = 0;
private $array = array('one', 'two', 'three');
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";
}
では、なぜ 2 つのインターフェイスが必要なのか、またそれらの違いは何なのか、説明できる人はいますか?