2012-09-17 3 views
1

내가 This Code에서 FilterIterator의 행동을 이해하려고 노력하고, 나는 액션 시퀀스를 이해하려고 노력했다 는 이해가 didnt하는 이유는 현재() 값을 출력 할 거예요 작업을 시도하는 경우 당신은 전에 다음() 또는 되감기()를 사용하지 않는 예를 들어 :PHP, SPL, FilterIterator 행동

// Please take a look at the link before 
echo $cull->current(); // wont work 
$cull->next(); or $cull->rewind(); then echo $cull->current(); // work 

지금 내가 할 수있는 경우, 내가 요소를 인쇄 할 수 있도록 "포인터"를 "새로 고침"을했는지 잘 모릅니다 어떤 사람은 제게 행동 순서를 알려주세요. 그것은 분명해질 것입니다. 너를 모두 축하하고 즐거운 하루 되라. 당신이 처음에 current()에 액세스하기 전에 next() 또는 rewind를 호출하지 않는 경우

+0

코드를 외부 웹 사이트에 연결 한 이유가 무엇입니까? 여기에 코드를 게시하는 것이 좋습니다. – goat

답변

1

이럴 내부 반복자 포인터는

일반적인 시나리오는 while($it->next()) AFAIK입니다 ... 첫 번째 요소로 설정되어 있지 않습니다!

+0

링크에서 나의 예에서 취한 행동 순서를 나에게 설명해 주시겠습니까? –

1

이 내가 여기 질문 같은 질문은 다른 소리에도 불구하고 있습니다 : Why must I rewind IteratorIterator 는 (귀하의 CullingIterator는 IteratorIterator 인 FilterIterator이다).

은 허용 대답과 의견을 읽고 있지만, 요약, 방식 IteratorIterator는 PHP 소스 코드로 작성되어이 같은 기능적 모델 뭔가 :

class IteratorIterator { 
    private $cachedCurrentValue; 
    private $innerIterator; 
    ... 
    public function current() { return $this->cachedCurrentValue; } 
    public function next() { 
     $this->innerIterator->next(); 
     $this->cachedCurrentValue = $this->innerIterator->current(); 
    } 
    public function rewind() { 
     $this->innerIterator->rewind(); 
     $this->cachedCurrentValue = $this->innerIterator->current(); 
    } 
} 

값이 아님을하고있는 중요한 부분 current()를 호출 할 때 내부 반복자에서 검색되지만 대신 다른 시간에 검색되고 생성자는 그 중 하나가 아닙니다.

개인적으로 나는 경계선 버그라고 생각합니다. 원하지 않는 동작이나 성능 문제가 발생하지 않고 예기치 않게 해결 될 수 있기 때문입니다.