PHP 반복자의 역할에 대한 자세한 소개

王林
풀어 주다: 2023-04-07 11:16:01
원래의
4515명이 탐색했습니다.

PHP 반복자의 역할에 대한 자세한 소개

컬렉션 객체와 컬렉션 객체에 대한 작업을 함께 배치하면 컬렉션 객체의 요소를 다른 방식으로 순회하고 싶을 때 생각해 보겠습니다. , '단일 책임 원칙'을 위반하는 컬렉션 객체의 수정이 필요하며, 반복자 패턴은 데이터 구조와 데이터 구조의 알고리즘을 분리하여 둘을 독립적으로 개발할 수 있다.

PHP 반복자(Iterator)의 역할:

객체가 자체적인 방식으로 내부 데이터를 반복할 수 있도록 허용합니다. Iterator 인터페이스 요약은 다음과 같습니다.

Iterator extends Traversable {
  //返回当前索引游标指向的元素
  abstract public mixed current ( void )
  //返回当前索引游标指向的键
  abstract public scalar key ( void )
  //移动当前索引游标到下一元素
  abstract public void next ( void )
  //重置索引游标
  abstract public void rewind ( void )
  //判断当前索引游标指向的元素是否有效
  abstract public boolean valid ( void )
}
로그인 후 복사

Iterator의 장점과 단점 분석:

# 🎜🎜#Advantages#🎜🎜 #:1. 다양한 탐색 방법을 지원합니다. 예를 들어, 순서가 지정된 목록에서는 필요에 따라 정방향 순회 및 역순 순회를 위한 두 개의 반복자를 제공합니다. 사용자는 단순화된 집계 클래스

2에서 순회 작업을 수행하기 위해 반복자를 가져오기만 하면 됩니다. 반복자의 도입으로 인해 원본 컬렉션 개체는 컬렉션 요소 자체를 순회할 필요가 없습니다

3 새로운 집계 클래스와 반복자 클래스를 추가하는 것이 매우 편리하며 두 차원이 가능합니다. 독립적으로 변경됨#🎜 🎜#

4. 서로 다른 컬렉션 구조에 대한 통합 인터페이스를 제공하여 동일한 알고리즘이 서로 다른 컬렉션 구조에서 작동하도록 지원

단점:

# 🎜🎜#

반복자 패턴은 데이터 저장과 데이터 탐색의 책임을 분리합니다. 새 컬렉션 개체를 추가할 때 해당 반복자 클래스를 쌍으로 추가해야 합니다. 어느 정도 시스템 복잡성.
다음은 Iterator 사용을 보여주는 간단한 예입니다.

<?php
/**
 * 该类允许外部迭代自己内部私有属性$_test,并演示迭代过程
 *
 * @author 疯狂老司机
 */
class TestIterator implements Iterator {
  /*
   * 定义要进行迭代的数组
   */
  private $_test = array(&#39;dog&#39;, &#39;cat&#39;, &#39;pig&#39;);
  /*
   * 索引游标
   */
  private $_key = 0;
  /*
   * 执行步骤
   */
  private $_step = 0;
  /**
   * 将索引游标指向初始位置
   *
   * @see TestIterator::rewind()
   */
  public function rewind() {
    echo &#39;第&#39;.++$this->_step.&#39;步:执行 &#39;.__METHOD__.&#39;<br>&#39;;
    $this->_key = 0;
  }
  /**
   * 判断当前索引游标指向的元素是否设置
   *
   * @see TestIterator::valid()
   * @return bool
   */
  public function valid() {
    echo &#39;第&#39;.++$this->_step.&#39;步:执行 &#39;.__METHOD__.&#39;<br>&#39;;
    return isset($this->_test[$this->_key]);
  }
  /**
   * 将当前索引指向下一位置
   *
   * @see TestIterator::next()
   */
  public function next() {
    echo &#39;第&#39;.++$this->_step.&#39;步:执行 &#39;.__METHOD__.&#39;<br>&#39;;
    $this->_key++;
  }
  /**
   * 返回当前索引游标指向的元素的值
   *
   * @see TestIterator::current()
   * @return value
   */
  public function current() {
    echo &#39;第&#39;.++$this->_step.&#39;步:执行 &#39;.__METHOD__.&#39;<br>&#39;;
    return $this->_test[$this->_key];
  }
  /**
   * 返回当前索引值
   *
   * @return key
   * @see TestIterator::key()
   */
  public function key() {
    echo &#39;第&#39;.++$this->_step.&#39;步:执行 &#39;.__METHOD__.&#39;<br>&#39;;
    return $this->_key;
  }
}
$iterator = new TestIterator();
foreach($iterator as $key => $value){
  echo "输出索引为{$key}的元素".":$value".&#39;<br><br>&#39;;
}
?>
로그인 후 복사

위의 예는 다음을 출력합니다.

第1步:执行 TestIterator::rewind
第2步:执行 TestIterator::valid
第3步:执行 TestIterator::current
第4步:执行 TestIterator::key
输出索引为0的元素:dog
第5步:执行 TestIterator::next
第6步:执行 TestIterator::valid
第7步:执行 TestIterator::current
第8步:执行 TestIterator::key
输出索引为1的元素:cat
第9步:执行 TestIterator::next
第10步:执行 TestIterator::valid
第11步:执行 TestIterator::current
第12步:执行 TestIterator::key
输出索引为2的元素:pig
第13步:执行 TestIterator::next
第14步:执行 TestIterator::valid
로그인 후 복사
From the 위의 예에서 valid return false를 실행하면 루프가 종료되는 것을 볼 수 있습니다.


관련 질문이 더 필요하시면 PHP 중국어 웹사이트를 방문하세요:

PHP 비디오 튜토리얼

위 내용은 PHP 반복자의 역할에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿