PHP bietet das Iterator Interface an, um Objekte direkt via foreach zu iterieren.

class MyClass implements Interator {
  private $array;
}
 
$obj = new MyClass();
foreach($obj as $key => $val){
  ...
}


Damit dieses Konstrukt funktioniert, benötigt die Klasse “MyClass” ein paar weitere Methoden und ein Attribut, welche vom Interface vorgeschrieben werden:

public function rewind(){
  $this->pointer = 0;
}
public function current(){
  return $this->array[$this->pointer];
}
public function key(){
  return $this->pointer;
}
public function next(){
  $this->pointer++;
}
public function valid(){
  return isset($this->array[$this->pointer]);
}

Nun geht das ganze aber auch viel einfacher und mit saubererem Code, mit dem IteratorAggregate Interface und einem schon vorhandenem Iterator (wie dem ArrayIterator). Das Interface ist ziemlich Ähnlich und implementiert ebenfalls Traversable.

class MyClass implements IteratorAggregate {
  private $array;
  public function getIterator(){
    return new ArrayIterator($this->array);
  }
}
 
$obj = new MyClass();
foreach($obj as $key => $value){
  ...
}

2 Antworten zu “Iterator oder IteratorAggregated Interface nutzen?”

  1. Christian says:

    Ist das eine Übersetzung von http://fabien.potencier.org/article/45/iterator-or-iteratoraggregate ?

  2. Michael says:

    Habe mich letzte Woche beruflich damit beschäftigt und mich auf diversen Seiten umgesehen, diese kannte ich noch nicht.
    Mag ein paar parallelen geben, gebe ich zu, aber was will man über das Thema auch anderes schreiben?

Hinterlasse einen Kommentar.

Network-wide options by YD - Freelance Wordpress Developer