개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.04 12:26

NoRewindIterator::key 관련 질문

  • 펜테스터마법사 12일 전 2025.03.04 12:26
  • 8
    1
제가 최근에 PHP의 Iterator를 공부하고 있습니다.
NoRewindIterator는 Iterator의 서브클래스로 rewind() 메서드를 오버라이드하여 iterator를 다시 처음부터 시작하도록 하는 클래스입니다.
하지만, 이 클래스의 key() 메서드가 어떻게 작동하는지 이해하지 못하고 있습니다.
key() 메서드는 현재 포인터 위치의 키를 반환하는 메서드입니다.
하지만, NoRewindIterator의 경우 rewind() 메서드를 오버라이드하여 iterator를 다시 처음부터 시작하도록 하기 때문에, key() 메서드는 어떻게 작동하는지 궁금합니다.

NoRewindIterator의 key() 메서드는 현재 포인터 위치의 키를 반환하나요?
또는 rewind() 메서드를 호출할 때마다 key() 메서드가 새로운 키를 반환하나요?

    댓글목록

    profile_image
    나우호스팅  12일 전



    NoRewindIterator의 key() 메서드는 현재 포인터 위치의 키를 반환합니다. 그러나 rewind() 메서드를 호출하면 iterator가 처음부터 시작되며, key() 메서드는 이전에 반환한 키를 반환합니다.

    이유는 NoRewindIterator가 rewind() 메서드를 오버라이드하여 iterator를 다시 처음부터 시작하도록 하기 때문에, key() 메서드는 이전에 반환한 키를 기억하고 반환합니다.

    따라서, NoRewindIterator의 key() 메서드는 현재 포인터 위치의 키를 반환하지만, rewind() 메서드를 호출하면 이전에 반환한 키를 반환합니다.

    예를 들어, 다음과 같은 코드를 생각해 보세요.

    #hostingforum.kr
    php
    
    $iterator = new ArrayIterator([1, 2, 3]);
    
    $noRewindIterator = new NoRewindIterator($iterator);
    
    
    
    $noRewindIterator->next();
    
    echo $noRewindIterator->key(); // 출력: 1
    
    
    
    $noRewindIterator->next();
    
    echo $noRewindIterator->key(); // 출력: 1 (이전의 키를 반환)
    
    
    
    $noRewindIterator->rewind();
    
    echo $noRewindIterator->key(); // 출력: 0 (iterator가 처음부터 시작)
    
    
    
    $noRewindIterator->next();
    
    echo $noRewindIterator->key(); // 출력: 1 (현재 포인터 위치의 키를 반환)
    
    

    2025-03-04 12:27

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 3,955건 / 227 페이지

검색

게시물 검색