PHP 5에서는 foreach 문을 사용하는 등 셀 목록을 통해 탐색할 수 있도록 객체를 정의하는 방법을 제공합니다. 기본적으로 모든 표시 속성은 순회에 사용됩니다.
예제 #1 단순 객체 탐색
class MyClass { public $var1 = 1; public $var2 = 2; public $var3 = 3; protected $protected = 'protected var'; private $private = 'private var'; function iterateVisible(){ echo "MyClass::iterateVisible:<br>"; foreach($this as $key => $value){ print "$key=>$value<br>"; } } } $class = new MyClass(); foreach($class as $key => $value){ print "$key => $value<br>"; } echo "<br>"; $class->iterateVisible();
출력 결과:
var1 => 1
var2 => 🎜>var3 => 3
MyClass::iterateVisible:
var1=>1
var2=>2
var3=> 3
protected=>protected var
private=>private var
위에 표시된 것처럼 foreach는 액세스할 수 있는 모든 표시 속성을 순회합니다.
더 나아가 Iterator 인터페이스를 구현해 보세요. 객체가 탐색 방법과 탐색할 때마다 어떤 값을 사용할 수 있는지 결정하도록 할 수 있습니다.
출력 결과:class MyIterator implements Iterator{ private $var = array(); public function __construct($array) { if(is_array($array)){ $this->var = $array; } } public function rewind(){ echo "rewinding<br>"; reset($this->var); } public function current(){ $var = current($this->var); echo "current:$var<br>"; return $var; } public function key(){ $var = key($this->var); echo "key:$var<br>"; return $var; } public function next(){ $var = next($this->var); echo "next:$var<br>"; return $var; } public function valid(){ $var = $this->current()!==false; echo "valid:$var<br>"; return $var; } } $values = array(1,2,3); $it = new MyIterator($values); foreach($it as $a => $b){ print "$a:$b<br>"; }
되감기
현재:1
유효:1
현재:1
키:0
0:1
다음:2
현재:2
유효:1
현재:2
키:1
1:2
다음:3
현재:3
유효:1
현재:3
키:2
2:3
다음:
현재:
유효:
모든 Iterator 메서드를 구현하는 대신 IteratorAggregate 인터페이스를 사용할 수 있습니다. IteratorAggregate는 Iterator를 구현하는 클래스의 인스턴스를 반환해야 하는 IteratorAggregate::getIterator()라는 하나의 메서드만 구현하면 됩니다.
예제 #3 IteratorAggregate를 구현하여 객체 트래버스
출력 결과:include_once('class2.php'); class MyCollection implements IteratorAggregate { private $items = array(); private $count = 0; public function getIterator(){ return new MyIterator($this->items); } public function add($value){ $this->items[$this->count++] = $value; } } $coll = new MyCollection(); $coll -> add('1'); $coll -> add('2'); $coll -> add('3'); foreach($coll as $k => $v){ echo "key/value:[$k->$v]<br><br>"; }
되감기
현재:1
유효: 1
현재:1
키:0
키/값:[0->1]
다음: 2
현재:2
유효:1
현재:2
키:1
키/값:[1 - >2]
다음:3
현재:3
유효:1
현재:3
키:2
키/값:[2->3]
다음:
현재:
유효: