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

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP基于SPL实现的迭代器模式示例

    本文实例讲述了PHP基于SPL实现的迭代器模式。分享给大家供大家参考,具体如下:

    现在有这么两个类,Department部门类、Employee员工类:

    //部门类
    class Department{
      private $_name;
      private $_employees;
      function __construct($name){
        $this->_name = $name;
        $this->employees = array();
      }
      function addEmployee(Employee $e){
        $this->_employees[] = $e;
        echo "员工{$e->getName()}被分配到{$this->_name}中去";
      }
    }
    //员工类
    class Employee{
      private $_name;
      function __construct($name){
        $this->_name = $name;
      }
      function getName(){
        return $this->_name;
      }
    }
    //应用:
    $lsgo = new Department('LSGO实验室');
    $e1 = new Employee("小锦");
    $e2 = new Employee("小猪");
    $lsgo->addEmployee($e1);
    $lsgo->addEmployee($e2);
    
    

    好了,现在LSGO实验室已经有两个部员了,现在我想把全部的部员都列出来,就是用循环来获取部门的每个员工的详情。

    在这里我们用PHP中的SPL标准库提供的迭代器来实现。

    《大话设计模式》中如是说:

    迭代器模式:迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。

    迭代器模式的作用简而言之:是使所有复杂数据结构的组件都可以使用循环来访问

    假如我们的对象要实现迭代,我们使这个类实现 Iterator(SPL标准库提供),这是一个迭代器接口,为了实现该接口,我们必须实现以下方法:

    current(),该函数返回当前数据项
    key(),该函数返回当前数据项的键或者该项在列表中的位置
    next(),该函数使数据项的键或者位置前移
    rewind(),该函数重置键值或者位置
    valid(),该函数返回 bool 值,表明当前键或者位置是否指向数据值

    实现了 Iterator 接口和规定的方法后,PHP就能够知道该类类型的对象需要迭代。

    我们使用这种方式重构 Department 类:

    class Department implements Iterator
    {
      private $_name;
      private $_employees;
      private $_position;//标志当前数组指针位置
      function __construct($name)
      {
        $this->_name = $name;
        $this->employees = array();
        $this->_position = 0;
      }
      function addEmployee(Employee $e)
      {
        $this->_employees[] = $e;
        echo "员工{$e->getName()}被分配到{$this->_name}中去";
      }
      //实现 Iterator 接口要求实现的方法
      function current()
      {
        return $this->_employees[$this->_position];
      }
      function key()
      {
        return $this->_position;
      }
      function next()
      {
        $this->_position++;
      }
      function rewind()
      {
        $this->_position = 0;
      }
      function valid()
      {
        return isset($this->_employees[$this->_position]);
      }
    }
    //Employee 类同前
    //应用:
    $lsgo = new Department('LSGO实验室');
    $e1 = new Employee("小锦");
    $e2 = new Employee("小猪");
    $lsgo->addEmployee($e1);
    $lsgo->addEmployee($e2);
    echo "LSGO实验室部员情况:";
    //这里其实遍历的$_employee
    foreach($lsgo as $val){
      echo "部员{$val->getName()}";
    }
    
    

    附加:

    假如现在我们想要知道该部门有几个员工,如果是数组的话,一个 count() 函数就 ok 了,那么我们能不能像上面那样把对象当作数组来处理?SPL标准库中提供了 Countable 接口供我们使用:

    class Department implements Iterator,Countable{
      //前面同上
      //实现Countable中要求实现的方法
      function count(){
        return count($this->_employees);
      }
    }
    //应用:
    echo "员工数量:";
    echo count($lsgo);
    

    本文参考自《深入理解PHP高级技巧、面向对象与核心技术》

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

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

    您可能感兴趣的文章:
    • PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
    • php设计模式之迭代器模式实例分析【星际争霸游戏案例】
    • PHP设计模式之迭代器(Iterator)模式入门与应用详解
    • PHP迭代器和生成器用法实例分析
    • php和C#的yield迭代器实现方法对比分析
    • PHP设计模式之PHP迭代器模式讲解
    • PHP迭代器和迭代的实现与使用方法分析
    • PHP聚合式迭代器接口IteratorAggregate用法分析
    • PHP迭代器接口Iterator用法分析
    • PHP迭代器的内部执行过程详解
    • PHP设计模式之迭代器模式的深入解析
    • PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
    上一篇:PHP生成推广海报的方法分享
    下一篇:php接口实现拖拽排序功能
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP基于SPL实现的迭代器模式示例 PHP,基于,SPL,实现,的,迭代,