Die IteratorAggregate
ist eine Schnittstelle eine externe Iterator zu erstellen:PHP-Schnittstellen IteratorAggregate vs 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;
Und Sie werden in der Lage zu durchqueren das Objekt mit foreach
:
foreach($obj as $key => $value) {
var_dump($key, $value);
echo "\n";
}
Während Iterator
eine Schnittstelle für externe Iteratoren oder Objekte, die intern selbst iteriert werden können:
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]);
}
}
Und wieder, können Sie es im Grunde die gleiche Art und Weise verfahren:
$it = new myIterator;
foreach($it as $key => $value) {
var_dump($key, $value);
echo "\n";
}
kann also jemand erklären, warum wir zwei Schnittstellen benötigen, und was ist der Unterschied zwischen ihnen?
Ich denke, Sie sind falsch mit den benutzerdefinierten Methoden. – tacone
Und wenn Sie noch mehr Zeit sparen wollen, können Sie einfach die Werte von 'getIterator' übernehmen. – Bell