我们来想一下,假如把鸠合对象和对鸠合对象的操纵放在一同,当我们想换一种体式格局遍历鸠合对象中元素时,就须要修正鸠合对象了,违犯“单一职责准绳”,而迭代器形式将数据构造和数据构造的算法分脱离,二者可自力生长。
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 ) }
迭代器优瑕玷剖析:
长处:
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
从以上例子能够看出,假如实行valid返回false,则轮回就此结束。
相相识更多相干题目请接见ki4网:PHP视频教程
以上就是细致引见php迭代器的作用的细致内容,更多请关注ki4网别的相干文章!