컬렉션 객체와 컬렉션 객체에 대한 작업을 함께 배치하면 컬렉션 객체의 요소를 다른 방식으로 순회하고 싶을 때 생각해 보겠습니다. , '단일 책임 원칙'을 위반하는 컬렉션 객체의 수정이 필요하며, 반복자 패턴은 데이터 구조와 데이터 구조의 알고리즘을 분리하여 둘을 독립적으로 개발할 수 있다.
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('dog', 'cat', 'pig'); /* * 索引游标 */ private $_key = 0; /* * 执行步骤 */ private $_step = 0; /** * 将索引游标指向初始位置 * * @see TestIterator::rewind() */ public function rewind() { echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>'; $this->_key = 0; } /** * 判断当前索引游标指向的元素是否设置 * * @see TestIterator::valid() * @return bool */ public function valid() { echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>'; return isset($this->_test[$this->_key]); } /** * 将当前索引指向下一位置 * * @see TestIterator::next() */ public function next() { echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>'; $this->_key++; } /** * 返回当前索引游标指向的元素的值 * * @see TestIterator::current() * @return value */ public function current() { echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>'; return $this->_test[$this->_key]; } /** * 返回当前索引值 * * @return key * @see TestIterator::key() */ public function key() { echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>'; return $this->_key; } } $iterator = new TestIterator(); foreach($iterator as $key => $value){ echo "输出索引为{$key}的元素".":$value".'<br><br>'; } ?>
위의 예는 다음을 출력합니다.
第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
관련 질문이 더 필요하시면 PHP 중국어 웹사이트를 방문하세요:
위 내용은 PHP 반복자의 역할에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!