Iterator 인터페이스를 도입하면 추상적인 Traversable 인터페이스가 확장됩니다. PHP는 많은 공통 기능에 대해 여러 가지 내장 반복자(SPL 반복자라고 함)를 제공합니다. 예를 들어 ArrayIterator, DirectoryIterator 등이 있습니다. Iterator 인터페이스를 구현하는 사용자 클래스는 여기에 정의된 추상 메소드를 구현해야 합니다.
Iterator extends Traversable { /* Methods */ abstract public current ( void ) : mixed abstract public key ( void ) : scalar abstract public next ( void ) : void abstract public rewind ( void ) : void abstract public valid ( void ) : bool }
Iterator::current — 현재 요소를 반환합니다.
Iterator::key — 현재 요소의 키를 반환합니다.
Iterator::next — 다음 요소로 이동합니다.
Iterator::rewind — 반복합니다. Iterator는 첫 번째 요소를 되감습니다.
Iterator::valid — 현재 위치가 유효한지 확인합니다.
IteratorAggregate 또는 Iterator 인터페이스를 구현할 때 implements 절에서 이름 앞에 나열되어야 합니다.
다음 PHP 스크립트에서 인터페이스를 구현하는 클래스에는 비공개 변수가 배열로 포함되어 있습니다. 반복자의 추상 메서드를 구현하면 foreach 루프와 next() 메서드를 사용하여 배열을 반복할 수 있습니다.
<?php class myIterator implements Iterator { private $index = 0; private $arr = array(10,20,30,40); public function __construct() { $this->index = 0; } public function rewind() { $this->index = 0; } public function current() { return $this->arr[$this->index]; } public function key() { return $this->index; } public function next() { ++$this->index; } public function valid() { return isset($this->arr[$this->index]); } } ?>
foreach 루프를 사용하면 MyIterator 객체의 배열 속성을 반복할 수 있습니다.
$it = new myIterator(); foreach($it as $key => $value) { echo "$key=>". $value ."</p><p>"; }
while 루프에서 next() 메서드를 호출하여 반복을 수행할 수도 있습니다. 루프를 시작하기 전에 반복자를 되감기해야 합니다.
$it->rewind(); do { echo $it->key() . "=>" .$it->current() . "</p><p>"; $it->next(); } while ($it->valid());
두 경우 모두 배열 속성을 순회하면 다음 결과가 표시됩니다
0=>10 1=>20 2=>30 3=>40
위 내용은 PHP 반복 가능한 인터페이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!