文档章节

PHP 5.5 新特性关键字 yield

hosser
 hosser
发布于 2016/06/02 16:31
字数 531
阅读 176
收藏 3

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)查看评论

本文转载自:http://blog.lmlphp.com/archives/126/PHP_5_5_new_features_yield

hosser
粉丝 192
博文 78
码字总数 4614
作品 3
徐汇
私信 提问
加载中

评论(6)

hosser
hosser 博主

引用来自“西南茂”的评论

总结的不好,差评。新手来看根本没看明白,老手来看基本没多大价值。
hosser
hosser 博主

引用来自“榕树下_”的评论

把py的东西拿来用了?
是的
榕树下_
榕树下_
把py的东西拿来用了?
西南茂
西南茂
总结的不好,差评。新手来看根本没看明白,老手来看基本没多大价值。
hosser
hosser 博主

引用来自“loyal”的评论

鄙视你用女人的头像
loyal
loyal
鄙视你用女人的头像
PHP 5.5 新特性

PHP5.5 前不久前刚刚发布,里面的新特性有什么?官方文档在这里: http://www.php.net/manual/zh/migration55.new-features.php 1 生成器 yield关键字 yield的中文文档在这里:http://php.ne...

王二狗子11
2018/01/07
0
0
Php5.5新特性 Generators详解

在PHP5.5.0版本中,新增了生成器(Generators)特性,用于简化实现迭代器接口(Iterator)创建简单的迭代器的复杂性。 通过生成器,我们可以轻松的使用迭代一系列的数据,而不需要事先在内存中构...

mylxsw
2015/06/04
164
1
复习PHP-语言参考-生成器

1.新关键词yield 注意 版本要大于5.5 所以只了解就可以了。 简单用法: 扩展:了解到一个有超的函数 range();生成一个指定元素个数的数组,没啥用感觉,PHP的数组太智能化了。 其他也没啥参考...

qzd1989
2014/05/02
0
0
PHP5.5或将引入Generators

作者: Laruence( ) 本文地址: http://www.laruence.com/2012/08/30/2738.html 最早的时候, 我记得是去年我刚加入开发组的时候, 神仙同学曾经提过, 问我是否可以考虑为PHP实现yield. 我当时做...

BearCatYN
2015/04/29
18
0
ES6的Generator函数(2018-06-21)

声明Generator函数 Generator函数,又称生成器函数,是ES6的一个重要的新特性。 注意: 1、普通函数用function来声明,Generator函数用function*声明。 2、Generator函数内部有新的关键字:y...

a小磊_
2018/06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
41分钟前
5
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
6
0
LNMP环境介绍,Mariadb安装,服务管理,mariadb安装3

LNMP环境介绍 Nginx 处理的请求有两种,分为 静态与动态 图片,js,css,视频,音频,flash 等都是静态请求,这些数据都不是保存在数据库里面的 动态请求一般来说,需要的数据是在数据库里面...

doomcat
今天
1
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
7
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部