:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

Iterator oder IteratorAggregated Interface nutzen?

php

Iterator oder IteratorAggregated Interface nutzen?

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 Comments

    • Michael

      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?

      Antworten

Leave a comment

Loading Facebook Comments ...