当前位置:首页 > PHP教程 > php应用 > 列表

PHP预定义接口之Iterator用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-08 10:59:23 浏览: 评论:0 

本文实例讲述了PHP预定义接口之Iterator用法。分享给大家供大家参考,具体如下:

Iterator(迭代器)接口

可在内部迭代自己的外部迭代器或类的接口。

接口摘要

  1. Iterator extends Traversable { 
  2.  
  3.     /* 方法 */ 
  4.  
  5.     abstract public current ( void ) : mixed 
  6.  
  7.     abstract public key ( void ) : scalar 
  8.  
  9.     abstract public next ( void ) : void 
  10.  
  11.     abstract public rewind ( void ) : void 
  12.  
  13.     abstract public valid ( void ) : bool 
  14.  

例:

  1. <?php 
  2.  
  3. class myIterator implements Iterator 
  4.  
  5.  
  6.   private $position = 0; 
  7.  
  8.   private $array = array
  9.  
  10.     'first_element'
  11.  
  12.     'second_element'
  13.  
  14.     'last_element'
  15.  
  16.   ); 
  17.  
  18.  
  19.  
  20.   /** 
  21.  
  22.    * 重置键的位置 
  23.  
  24.    */ 
  25.  
  26.   public function rewind(): void 
  27.  
  28.   { 
  29.  
  30.     var_dump(__METHOD__); 
  31.  
  32.     $this->position = 0; 
  33.  
  34.   } 
  35.  
  36.  
  37.  
  38.   /** 
  39.  
  40.    * 返回当前元素 
  41.  
  42.    */ 
  43.  
  44.   public function current() 
  45.  
  46.   { 
  47.  
  48.     var_dump(__METHOD__); 
  49.  
  50.     return $this->array[$this->position]; 
  51.  
  52.   } 
  53.  
  54.  
  55.  
  56.   /** 
  57.  
  58.    * 返回当前元素的键 
  59.  
  60.    * @return int 
  61.  
  62.    */ 
  63.  
  64.   public function key(): int 
  65.  
  66.   { 
  67.  
  68.     var_dump(__METHOD__); 
  69.  
  70.     return $this->position; 
  71.  
  72.   } 
  73.  
  74.  
  75.  
  76.   /** 
  77.  
  78.    * 将键移动到下一位 
  79.  
  80.    */ 
  81.  
  82.   public function next(): void 
  83.  
  84.   { 
  85.  
  86.     var_dump(__METHOD__); 
  87.  
  88.     ++$this->position; 
  89.  
  90.   } 
  91.  
  92.  
  93.  
  94.   /** 
  95.  
  96.    * 判断键所在位置的元素是否存在 
  97.  
  98.    * @return bool 
  99.  
  100.    */ 
  101.  
  102.   public function valid(): bool 
  103.  
  104.   { 
  105.  
  106.     var_dump(__METHOD__); 
  107.  
  108.     return isset($this->array[$this->position]); 
  109.  
  110.   } 
  111.  
  112.  
  113.  
  114.  
  115. $it = new myIterator; 
  116.  
  117.  
  118.  
  119. foreach ($it as $key => $value) { 
  120.  
  121.   var_dump($key$value); 
  122.  
  123.   echo "\n"
  124.  

输出结果:

  1. string 'myIterator::rewind' (length=18) 
  2. string 'myIterator::valid' (length=17) 
  3. string 'myIterator::current' (length=19) 
  4. string 'myIterator::key' (length=15) 
  5. int 0 
  6. string 'first_element' (length=13) 
  7. string 'myIterator::next' (length=16) 
  8. string 'myIterator::valid' (length=17) 
  9. string 'myIterator::current' (length=19) 
  10. string 'myIterator::key' (length=15) 
  11. int 1 
  12. string 'second_element' (length=14) 
  13. string 'myIterator::next' (length=16) 
  14. string 'myIterator::valid' (length=17) 
  15. string 'myIterator::current' (length=19) 
  16. string 'myIterator::key' (length=15) 
  17. int 2 
  18. string 'last_element' (length=12) 
  19. string 'myIterator::next' (length=16) 
  20. string 'myIterator::valid' (length=17) 

由结果可知,当类实现了Iterator接口,实现改类实例数据集的时候首先会将数据集的键重置,然后逐步后移,每次都会进行然后返回当前元素以及当前键。

Tags: PHP预定义接口 Iterator

分享到: