1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

      PHP中的Iterator迭代对象属性详解

       更新时间£º2019年04月12日 08:32:13   作者£ºitbsl   我要评论

      这篇文章主要给大家介绍了关于PHP中Iterator迭代对象属性的相关资料£¬文中通过示例代码介绍的非常详细£¬对大家学习或者使用PHP具有一定的参考学习价值£¬需要的朋友们下面来一起学习学习吧

      前言

      foreach用法和之前的数组遍历是一样的£¬只不过这里遍历的key是属性名£¬value是属性值¡£在类外部遍历时£¬只能遍历到public属性的£¬因为其它的都是受保护的£¬类外部不可见¡£

      class HardDiskDrive {
      
        public $brand;
        public $color;
        public $cpu;
        public $workState;
      
        protected $memory;
        protected $hardDisk;
      
        private $price;
      
        public function __construct($brand, $color, $cpu, $workState, $memory, $hardDisk, $price) {
      
          $this->brand = $brand;
          $this->color = $color;
          $this->cpu  = $cpu;
          $this->workState = $workState;
          $this->memory = $memory;
          $this->hardDisk = $hardDisk;
          $this->price = $price;
        }
      
      }
      
      $hardDiskDrive = new HardDiskDrive('希捷', 'silver', 'tencent', 'well', '1T', 'hard', '$456');
      
      foreach ($hardDiskDrive as $property => $value) {
      
        var_dump($property, $value);
        echo '<br>';
      }

      输出结果为:

      string(5) "brand" string(6) "希捷"
      string(5) "color" string(6) "silver"
      string(3) "cpu" string(7) "tencent"
      string(9) "workState" string(4) "well"

      通过输出结果我们?#37096;?#20197;看得出来常规遍历是无法访问受保护的属性的¡£

      如果我们想遍历出对象的所有属性£¬就需要控制foreach的行为£¬就需要给类对象£¬提供更多的功能£¬需要继承自Iterator的接口:

      ?#23186;?#21475;£¬实现了foreach需要的每个操作¡£foreach的执行流程如下图£º

      看图例中£¬foreach中有几个关键步骤£º5个¡£

      而Iterator迭代器中所要求的实现的5个方法£¬就是用来帮助foreach,实现在遍历对象时的5个关键步骤£º

      当foreach去遍历对象时, 如果发现对象实现了Ierator接口, 则执行以上5个步骤时, 不是foreach的默认行为, 而是调用对象的对应方法即可:

      示例代码:

      class Team implements Iterator {
      
        //private $name = 'itbsl';
        //private $age = 25;
        //private $hobby = 'fishing';
      
        private $info = ['itbsl', 25, 'fishing'];
      
        public function rewind()
        {
          reset($this->info); //重置数组指针
        }
      
        public function valid()
        {
          //如果为null,表示没?#24615;?#32032;£¬返回false
          //如果不为null,返回true
      
          return !is_null(key($this->info));
        }
      
        public function current()
        {
          return current($this->info);
        }
      
        public function key()
        {
          return key($this->info);
        }
      
        public function next()
        {
          return next($this->info);
        }
      
      }
      
      $team = new Team();
      
      foreach ($team as $property => $value) {
      
        var_dump($property, $value);
        echo '<br>';
      }

      总结

      以上就是这篇文章的全部内容了£¬希望本文的内容对大家的学习或者工作具有一定的参考学习价值£¬谢谢大家对脚本之家的支持¡£

      相关文章

      • mysql+php分页类£¨已测£©

        mysql+php分页类£¨已测£©

        三个参数¡£ mysql_query()的结果, url变量page, 您要的每页记录数 例子在这个文件底部 淡水河边整理测试
        2008-03-03
      • php出现Cannot modify header information问题的解决方法大全

        php出现Cannot modify header information问题的解决方法大全

        我做了一个统一的出错提示函数,在函数执行里面,先处理出错的地址写入cookie以方便用户登陆以后可以直接跳转到要执行的这个页面,可是发现在服务器上测试时,竟然提示本地没有出现的错误: Warning: Cannot modify header information - headers already sent by....
        2008-04-04
      • PHP封装函数实现生成随机的字符串验证码

        PHP封装函数实现生成随机的字符串验证码

        这篇文章主要介绍了利用PHP封装函数实现生成随机的字符串验证码的相关资料£¬文中给出了详细的介绍的示例代码£¬对大家具有一定的参?#25216;?#20540;£¬有需要的朋友们可以一起来学习学习¡£
        2017-01-01
      • ThinkPHP 防止表单重复提交的方法

        ThinkPHP 防止表单重复提交的方法

        防止表单重复提交有很多种方法£¬其不外乎£¬客户端脚本防止刷新£¬服务端token验证等等£¬thinkphp内置了表单token验证£¬可以方便的防止表单重复提交
        2011-08-08
      • PHP5 的对象赋值机制介绍

        PHP5 的对象赋值机制介绍

        看到PHP设计模式中值对象模式中的例题£¬对于结果总感到有点疑惑¡£回头看了下PHP5的对象赋值才真正清楚¡£
        2011-08-08
      • php实现的简单检验登陆类

        php实现的简单检验登陆类

        这篇文章主要介绍了php实现的简单检验登陆类,可实现基本的php数据库查询及密码匹配的功能,需要的朋友可以参考下
        2015-06-06
      • 深入apache host的配置详解

        深入apache host的配置详解

        本篇文章是对apache host的配?#23186;?#34892;了详细的分析介绍£¬需要的朋友参考下
        2013-06-06
      • php中简单的对称?#29992;?#31639;法实现

        php中简单的对称?#29992;?#31639;法实现

        最近突发奇想要往数据库里保存一些机密的东西£¬然后就想着怎么让别人即使进入到了数据库?#37096;?#19981;懂存储的是什么£¬那么只有?#29992;?#20102;£»可是我们自己还要看呢£¬那只能找一些对称?#29992;?#30340;算法了£¬我们想看的时候再解密回来¡£下面就介绍了php中简单的对称?#29992;?#31639;法实现¡£
        2017-01-01
      • php中访问修饰符的知识点总结

        php中访问修饰符的知识点总结

        在本篇文章里小编给大家分享了关于php中访问修饰符的知识点总结£¬兴趣的朋友们可以学习参考下¡£
        2019-01-01
      • php删除txt文件指定行及按行读取txt文档数据的方法

        php删除txt文件指定行及按行读取txt文档数据的方法

        这篇文章主要介绍了php删除txt文件指定行及按行读取txt文档数据的方法,涉及php针对txt文件的按行读取¡¢删除等操作技巧,需要的朋友可以参考下
        2017-01-01

      最新评论

      3dÊÔ»úºÅÖвÊÍø

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>