PHP 5.5 新特性关键字 yield

PHP 5.5 新特性关键字 yield技术

maybe yes 发表于2015-07-07 23:39

原文链接 : http://blog.lmlphp.com/archives/126/PHP_5_5_new_features_yield  来自 : LMLPHP后院

PHP 5.5 增加了个新的关键字 yield,这个也是本人今天在看开源应用 tencent-php tsf 的源码的时候发现的,其中大量的使用到了 yield。

通俗一点的讲,yield 是 generator 发生器,配合迭代 iterator 使用。在函数迭代的某一步遇到 yield 语句时返回一个值,下次生成时从 yield 语句的地方继续运行,直到再次遇到 yield 再次返回值,这样就可以达到更好的迭代 iterate 的效果。

看官方文档上有个例子讲到了将 range() 实现为生成器,当数据量很大的时候不会消耗太多内存,代码示例如下:

<?php
function xrange($start, $limit, $step = 1) {
    if ($start < $limit) {
        if ($step <= 0) {
            throw new LogicException('Step must be +ve');
        }

        for ($i = $start; $i <= $limit; $i += $step) {
            yield $i;
        }
    } else {
        if ($step >= 0) {
            throw new LogicException('Step must be -ve');
        }

        for ($i = $start; $i >= $limit; $i += $step) {
            yield $i;
        }
    }
}
?>

yield 关键字语法返回生成器对象。当一个生成器函数第一次被调用的时候,会返回一个内部 Generator 类的对象。这个对象和一个只能向前的迭代器对象一样实现了 Iterator 接口。大部分 Generator 类中的方法拥有和 Iterator 接口一样的语义,但是生成器对象有一个特殊的方法: send()。

<?php
class Generator implements Iterator {
    public function rewind();     // 返回到迭代器的第一个元素。

    public function valid();      // 返回false如果迭代器已经关闭,否则返回true

    public function current();    // 返回当前yield值.

    public function key();        // 返回当前yield键名.

    public function next();       // 恢复生成器的执行。
    
    public function send($value); // 将传入的值作为yield表达式的结果并且恢复发生器的执行。

}
?>

阅(554)评(0)查看评论

转载于:https://my.oschina.net/hosser/blog/686097

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值