PHP 디자인 모드 의 PHP 교체 기 모드 설명

교체 기 는 커서(cursor)라 고도 부 르 는데 프로그램 이 디자인 한 소프트웨어 디자인 모델 로 용기 물건(container,예 를 들 어 list 나 vector)에서 여러 번 방문 할 수 있 는 인터페이스 로 설계 자 는 용기 물건 의 내용 에 관심 을 가 질 필요 가 없다.
각종 언어 실습 Iterator 의 방식 은 모두 같 지 않 습 니 다.어떤 대상 언어 는 자바,C\#,Python,Delphi 등 이 Iterator 의 특성 을 언어 에 완벽 하 게 통합 시 켰 습 니 다.우 리 는 암시 적 교체 기(implicit iterator)라 고 부 르 지만 C+언어 는 원래 Iterator 의 특색 이 없 지만 STL 은 template 를 이용 하여 기능 이 강 한 iterator 를 만 들 었 습 니 다.
PHP 5 는 인 터 페 이 스 를 지원 하기 시 작 했 고 Iterator 인터페이스 가 내장 되 어 있 습 니 다.따라서 하나의 종 류 를 정의 하고 Iterator 인 터 페 이 스 를 실현 했다 면 이러한 대상 은ZEND_ITER_OBJECT입 니 다.그렇지 않 으 면ZEND_ITER_PLAIN_OBJECT입 니 다.ZEND_ITER_PLAIN_OBJECT의 클래스 에 대해 foreach 는HASH_OF을 통 해 이 대상 의 기본 속성 배열 을 가 져 온 다음 이 배열 에 대해 foreach 를 진행 합 니 다.
먼저 교체 기의 정 의 를 살 펴 보 자.그것 은 취 합 대상 의 각 요 소 를 순서대로 방문 하고 이 대상 의 내부 디 스 플레이 를 드 러 내지 않 는 방법 을 제공 하 는 것 이다.그것 은 특정한 대상 을 구성 하 는 데 도움 을 줄 수 있 으 며,그 대상 들 은 단일 표준 인터페이스 순환 이나 모든 유형의 계산 가능 한 데 이 터 를 교체 할 수 있다.교체 기 모드 의 구조 도 를 보 겠 습 니 다:

교체 기 에 필요 한 내부 방법 을 살 펴 보 자.
  • Iterator::current ― 현재 요 소 를 반환 합 니 다
  • Iterator::key ― return the key of the current element 현재 요소 의 키 를 되 돌려 줍 니 다
  • Iterator::next ― Move forward to next element 다음 요소 로 이동
  • Iterator::rewind ― Rewind the Iterator to the first element 다시 첫 번 째 요소 로 돌아 가기
  • Iterator::valid ― Checks if current position is valid 현재 위치의 유효성 검사
  • ZENDITER_OBJECT 의 클래스 대상 은 호출 대상 이 구현 하 는 Iterator 인터페이스 관련 함 수 를 통 해 foreach 를 진행 합 니 다.
    
    <?php
    /**
    * Iterator        
    */
    class sample implements Iterator {
      private $_items ;
      public function __construct(&$data) {
        $this->_items = $data;
      }
      public function current() {
        return current($this->_items);
      }
      public function next() {
        next($this->_items);  
      }
      public function key() {
        return key($this->_items);
      }
      public function rewind() {
        reset($this->_items);
      }
      public function valid() {                                       
        return ($this->current() !== FALSE);
      }
    }
    /** DEMO */
    $data = array(1, 2, 3, 4, 5);
    $sa = new sample($data);
    foreach ($sa AS $key => $row) {
      echo $key, ' ', $row, '<br />';
    }
    ?>
    교체 기의 사용 범 위 를 몇 개 들 어 보 겠 습 니 다.
    교체 기 를 되 돌려 주 는 가방 이나 라 이브 러 리 를 사용 할 때(예:PHP 5 의 SPL 교체 기)
    용기 의 모든 요 소 를 한 번 에 호출 할 수 없 을 때
    엄 청 난 양의 무 소 를 처리 할 때(데이터베이스 에 있 는 표 는 GB 로 계 산 된 데이터)
    ……
    서로 다른 교체 기 는 서로 다른 인터페이스 가 있 습 니 다.예 를 들 어 PHP SPL 교체 기 에는 Next()(다음 요소 로 이동),corrent()(현재 요소 로 돌아 가기),valid()(교체 끝 검사),rewind()(처음부터 다시 시작),key()(현재 요소 의 색인 으로 돌아 가기)가 포함 되 어 있 습 니 다.물론 자신 이 사용 하기에 적합 한 교체 기 를 직접 쓸 수도 있 고 시스템 의 교체 기 를 사용 할 수도 있다.
    일반적으로 foreach 를 사용 하여 교체 기 를 사용 합 니 다.다음은 코드 를 정리 하 였 습 니 다.
    
    <?php  
    class sample implements Iterator
    {
      private $_items = array(1,2,3,4,5,6,7);
      public function __construct() {
             ;//void
      }
      public function rewind() { reset($this->_items); }
      public function current() { return current($this->_items); }
      public function key() { return key($this->_items); }
      public function next() { return next($this->_items); }
      public function valid() { return ( $this->current() !== false ); }
    }
    $sa = new sample();
    foreach($sa as $key => $val){
      print $key . "=>" .$val;
    }
    ?> 
    while 순환 도 가능 합 니 다:
    
    <?php
    while ($itertor->valid()){ //         
     $element=$itertor->current(); //      
     $itertor->next(); //        
    }
    ?>
    왜 PHP 의 교체 기 를 배 워 야 합 니까?중요 한 이유 가 있 습 니 다.PHP 의 교체 기 를 이용 하여 대상 을 대상 으로 흔히 볼 수 있 는 데이터 구 조 를 실현 할 수 있 습 니 다.예 를 들 어 목록,스 택,대기 열 과 그림 등 입 니 다.다음은 PHP 로 대부분의 데이터 구 조 를 실현 하고 대상 을 대상 으로 하 는 주 제 를 만 들 것 이다.그래서 여 기 는 먼저 PHP 교체 기 를 예열 해 놓 았 습 니 다.
    총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

    좋은 웹페이지 즐겨찾기