欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

看看PHP迭代器的内部执行过程

程序员文章站 2022-05-18 17:57:58
...

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 下面我们来了解如何实现一个自定义的迭代器,然后再开始慢慢理解迭代器的内部工作原理。先来看一个官方的例子: ?php class myIterator implements Iterator { private $position = 0; private $arra

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  下面我们来了解如何实现一个自定义的迭代器,然后再开始慢慢理解迭代器的内部工作原理。先来看一个官方的例子:

  

  class myIterator implements Iterator {

  private $position = 0;

  private $array = array(

  "first_element",

  "second_element",

  "last_element",

  );

  public function __construct() {

  $this->position = 0;

  }

  function rewind() {

  var_dump(__METHOD__);

  $this->position = 0;

  }

  function current() {

  var_dump(__METHOD__);

  return $this->array[$this->position];

  }

  function key() {

  var_dump(__METHOD__);

  return $this->position;

  }

  function next() {

  var_dump(__METHOD__);

  ++$this->position;

  }

  function valid() {

  var_dump(__METHOD__);

  return isset($this->array[$this->position]);

  }

  }

  $it = new myIterator;

  foreach($it as $key => $value) {

  echo '输出键值:';

  var_dump($key, $value);

  //echo $key;

  echo "\n";

  }

  程序运行输出:

  string(18) "myIterator::rewind"

  string(17) "myIterator::valid"

  string(19) "myIterator::current"

  string(15) "myIterator::key"

  输出键值:int(0)

  string(13) "first_element"

  string(16) "myIterator::next"

  string(17) "myIterator::valid"

  string(19) "myIterator::current"

  string(15) "myIterator::key"

  输出键值:int(1)

  string(14) "second_element"

  string(16) "myIterator::next"

  string(17) "myIterator::valid"

  string(19) "myIterator::current"

  string(15) "myIterator::key"

  输出键值:int(2)

  string(12) "last_element"

  string(16) "myIterator::next"

  string(17) "myIterator::valid"

  一般的迭代器内部需要下面的方法:

  Iterator::current - Return the current element 返回当前元素

  Iterator::key - Return the key of the current element 返回当前元素的键

  Iterator::next - Move forward to next element 移向下一个元素

  Iterator::rewind - Rewind the Iterator to the first element 重新回到第一个元素

  Iterator::valid - Checks if current position is valid 检查当前位置的有效性

  如果不是很清楚迭代器的内容工作流程,可以查看下面的迭代器对数组的遍历过程:

  

  /**

  * @author nicesunboy@gmail.com

  */

  class MyIterator implements Iterator

  {

  private $var = array();

  public function __construct($array)

  {

  if (is_array($array)) {

  $this->var = $array;

  }

  }

[1] [2]

看看PHP迭代器的内部执行过程