2011-03-16 4 views
2

객체 반복이란 무엇이며이 코드의 작동 방식을 설명 할 수 있습니까?PHP에서 객체 반복이란 무엇입니까

 
 
class MyIterator implements Iterator{ 
    private $var = array(); 
    public function __construct($array){ 
     if (is_array($array)) { 
      $this->var = $array; 
     } 
    } 
    public function rewind() { 
     echo "rewinding
"; reset($this->var); } public function key() { $var = key($this->var); echo "key: $var
"; return $var; } public function next() { $var = next($this->var); echo "next: $var
"; return $var; } public function valid() { $var = $this->current() !== false; echo "valid: {$var}
"; return $var; } public function current() { $var = current($this->var); echo "current: $var
"; return $var; } } $values = array(1,2,3); $it = new MyIterator($values); foreach ($it as $a => $b) { print "$a: $b
"; }
+0

위대한 질문입니다, 코드는 공식 php.net 매뉴얼 [Object iteration] (http://php.net/manual/en/language.oop5.iterations.php)에서 나온 것입니다. . 저자는 그것이하는 일과 이유에 대해 설명하지 않았습니다. –

답변

1

Iterator 인터페이스는 아마도 자바 반복자에서 영감이다. foreach 구문을 사용하여 항목 목록을 반복적으로 반복하기위한 일반 인터페이스를 제공합니다.

코드는이 인터페이스를 구현하는 클래스를 정의합니다. 기본적으로 배열과 기본적으로 동일한 기능을 제공하지만 일부 echo 문을 추가합니다.

왜 iterators를 사용합니까?

Iterator의 이점은 상위 추상화 된 인터페이스를 제공하므로 호출하는 코드가 무슨 일이 일어나고 있는지에 대해 크게 걱정할 필요가 없다는 것입니다. 동시에 모든 것을 한 번에 메모리에로드 할 필요없이 대량의 데이터 소스 (db의 행을 가져 와서 파일의 행을 읽음)를 청크로 처리 할 수 ​​있습니다.

관련 문제