一个分享个人学习、开发经验的Blog,http://www.joyphper.net

PHP 5.5 或将引入Generators

posted @ 2012-09-12 11:59 | 阅读:6013 | 评论:1 | 分类: 新闻

所谓Generators, 我们以下称为”生成器”, 是一种可以返回迭代器的生成器. 呵呵, 这话有点绕, 让我们看看一个代码, 在没有迭代器之前, 如果我们遍历一个动态生成的数组:

 

<?php
       function return_array() {
           $array = dummy(); //计算全部数组内容
           return $array;
       }
     
      foreach (return_array() as $v) {
      }

这里就有一个问题, 我们需要一次性生成全部数组内容, 并且返回, 想象一下如果数据来源非常大, 我们无法一次性读入内存.

当然, 我们可以采用一个类, 封装一个支持迭代的实现:

 

<?php
      class dummy implements Iterator {
         public function rewind() {
           //实现代码
         }
        public function valid() {
           //实现代码
        }
        public function current() {
           //实现代码
        }
        public function key() {
           //实现代码
        }
        public function next() {
           //实现代码
        }
      }
     
      foreach (new Dummy() as $v) {
      }

相比这种实现, 生成器提供了一种更加简便的选择, 比如实现如上同样的功能:

 

<?php
    function genrators() {
       while ($i = dummy_line()) //生成数组的一个元素
       {
              yield $i;
       }
    }
     
    foreach (generators() as $v) {
     
    }

也就是说, 每当产生一个数组元素, 就通过yield关键字返回成一个, 并且函数执行暂停, 当返回的迭代器的next方法被调用的时候, 会恢复刚才函数的执行, 从上一次被yield暂停的位置开始继续执行, 到下一次遇到yield的时候, 再次返回.

好了, 这就是个简单的介绍, 如果大家有兴趣, 可以搜索一下其他已经实现了Generators语言的相关介绍.

TAG: PHP5.5 , Generators

共有1条评论 发表评论>>

老头网 发表于:2012-09-12 16:27
这博客确实不错。!
点击换一张验证码