前沿
上回咱们探讨了 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() 指向下一个元素
致谢
感激你看完这篇文章,有什么不对的中央欢送指出,谢谢????