前沿
上回咱们探讨了PHP的生成器,明天咱们来看看PHP的迭代器。
区别
生成器和迭代器有什么区别呢?
一句话:生成器只是简略的迭代器。
与规范的PHP迭代器不同,PHP生成器不要求类实现Iterator
接口,从而加重了类的累赘。生成器会依据需要计算并产出要迭代的值。这对利用的性能有重大影响。试想一下,如果规范的PHP迭代器常常在内存中执行迭代操作,这要事后计算出数据集,性能低下;如果要应用特定的形式计算大量数据,对性能的影响更甚。此时咱们能够应用生成器,即便计算并产出后续值,不占用贵重的内存资源。
作用
迭代器有什么作用呢?
让对象变得可迭代并体现得像对象汇合。
咱们来看一道腾讯面试题
使对象能够像数组一样进行foreach循环,要求属性必须是公有。
这题其实就是考查到了迭代器了
咱们先看看迭代器的接口
Iterator extends Traversable {/* 办法 */ abstract public current ( ) : mixed abstract public key ( ) : scalar abstract public next ( ) : void abstract public rewind ( ) : void abstract public valid ( ) : bool}
外面定义了5个形象办法
来看看最初的答案
class sample implements Iterator{ private $_items = array(1,2,3,4,5,6,7); public function __construct() { } //重置到到第一个元素 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;}//输入0=>1 1=>2 2=>3 3=>4 4=>5 5=>6 6=>7
咱们通过foreach 遍历对象的时候,外部会顺次调用
- rewind() 重置到第一个元素
- valid() 查看以后地位是否无效
- current() 返回以后元素
- key() 返回以后元素的键
- next() 指向下一个元素
致谢
感激你看完这篇文章,有什么不对的中央欢送指出,谢谢????