Php/docs/class.iterator

提供:Dev Guides
< Php
移動先:案内検索

(PHP 5, PHP 7, PHP 8)

はじめに

外部のイテレータあるいはオブジェクト自身から反復処理を行うためのインターフェイスです。


インターフェイス概要


Iterator extends Traversable {

/* メソッド */

abstract public current ( ) : mixed

abstract public key ( ) : scalar

abstract public next ( ) : void

abstract public rewind ( ) : void

abstract public valid ( ) : bool

}

定義済みのイテレータ

PHP には多くのイテレータがあらかじめ用意されており、日々の作業に使えます。その一覧は SPL イテレータ を参照ください。


例1 基本的な使用法

この例は、イテレータで foreach を使ったときに、どんな順番でメソッドが呼ばれるかを示すものです。


<?phpclass myIterator implements Iterator {    private $position = 0;    private $array = array(        "firstelement",        "secondelement",        "lastelement",    );      public function __construct() {        $this->position = 0;    }    public function rewind() {        var_dump(__METHOD__);        $this->position = 0;    }    public function current() {        var_dump(__METHOD__);        return $this->array[$this->position];    }    public function key() {        var_dump(__METHOD__);        return $this->position;    }    public function next() {        var_dump(__METHOD__);        ++$this->position;    }    public function valid() {        var_dump(__METHOD__);        return isset($this->array[$this->position]);    }}$it = new myIterator;foreach($it as $key => $value) {    var_dump($key, $value);    echo "\n";}?>

上の例の出力は、 たとえば以下のようになります。


string(18) "myIterator::rewind"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(0)
string(12) "firstelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(1)
string(13) "secondelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(2)
string(11) "lastelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"

目次