• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP设计模式入门之迭代器模式原理与实现方法分析

    本文实例讲述了PHP设计模式入门之迭代器模式。分享给大家供大家参考,具体如下:

    在深入研究这个设计模式之前,我们先来看一道面试题,来自鸟哥的博客,

    题目是这样的:

    使对象可以像数组一样进行foreach循环,要求属性必须是私有。

    不使用迭代器模式很难实现,先看实现的代码:

    sample.php

    ?php
    class Sample implements Iterator{
     private $_arr;
     
     public function __construct(Array $arr){
     $this->_arr = $arr;
     }
     
     public function current(){
       return current($this->_arr);
     }
     
     public function next(){
       return next($this->_arr);
     }
     
     public function key(){
       return key($this->_arr);
     }
     
     public function valid(){
       return $this->current() !== false;
     }
     
     public function rewind(){
      reset($this->_arr);
     }
    }
    
    

    index.php

    ?php
    require 'Sample.php';
     
    $arr = new Sample(['max', 'ben', 'will']); 
     
    foreach ($arr as $k=>$v){
      echo $k."-".$v."br />";
    }
    
    

    其中Iterator接口来自php的spl类库,在写完设计模式的相关文章之后,将会进一步研究这个类库。

    另外在网上找到了一段yii框架中关于迭代器模式的实现代码:

    class CMapIterator implements Iterator {
    /**
    * @var array the data to be iterated through
    */
      private $_d;
    /**
    * @var array list of keys in the map
    */
      private $_keys;
    /**
    * @var mixed current key
    */
      private $_key;
     
    /**
    * Constructor.
    * @param array the data to be iterated through
    */
      public function __construct($data) {
        $this->_d=$data;
        $this->_keys=array_keys($data);
      }
     
    /**
    * Rewinds internal array pointer.
    * This method is required by the interface Iterator.
    */
      public function rewind() {                                         
        $this->_key=reset($this->_keys);
      }
     
    /**
    * Returns the key of the current array element.
    * This method is required by the interface Iterator.
    * @return mixed the key of the current array element
    */
      public function key() {
        return $this->_key;
      }
     
    /**
    * Returns the current array element.
    * This method is required by the interface Iterator.
    * @return mixed the current array element
    */
      public function current() {
        return $this->_d[$this->_key];
      }
     
    /**
    * Moves the internal pointer to the next array element.
    * This method is required by the interface Iterator.
    */
      public function next() {
        $this->_key=next($this->_keys);
      }
     
    /**
    * Returns whether there is an element at current position.
    * This method is required by the interface Iterator.
    * @return boolean
    */
      public function valid() {
        return $this->_key!==false;
      }
    }
     
    $data = array('s1' => 11, 's2' => 22, 's3' => 33);
    $it = new CMapIterator($data);
    foreach ($it as $row) {
      echo $row, 'br />';
    }
    
    

    关于迭代器设计模式官方的定义是:使用迭代器模式来提供对聚合对象的统一存取,即提供一个外部的迭代器来对聚合对象进行访问和遍历 , 而又不需暴露该对象的内部结构。又叫做游标(Cursor)模式。

    好吧,我不是很能理解。为什么明明数组已经可以用foreach来遍历了还要用这样一种迭代器模式来实现,只有等待工作经验的加深来进一步理解吧。

    参考文档:

    https://www.jb51.net/article/184182.htm

    https://www.jb51.net/article/185478.htm

    https://www.jb51.net/article/185483.htm

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
    • php设计模式之迭代器模式实例分析【星际争霸游戏案例】
    • PHP设计模式之PHP迭代器模式讲解
    • PHP设计模式之迭代器模式
    • PHP设计模式之迭代器模式的深入解析
    • PHP设计模式之迭代器模式的使用
    上一篇:PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
    下一篇:PHP设计模式入门之状态模式原理与实现方法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP设计模式入门之迭代器模式原理与实现方法分析 PHP,设计模式,入门,之,迭代,