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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )