php中的generator和yield

1.Generator
在编程这个领域,我们可以把它想象成一个可以生成一系列数据的工具,这个工具可以具体为一个类、一个函数或者是一个语句
定义:
http://de2.php.net/manual/en/class.generator.php
特点:
不能直接实例化使用new Generator()调用,必须使用yield

2.yield
在php中,yield关键字只能在函数中使用,代码执行到yield语句,函数的执行就会终止并返回yield表达式给Generator

当对Generator对象进行遍历迭代,那么带有yield语句的函数后的代码会执行
例子:
function a() {
    $b =23;
    yield $b;
    echo 1;
}
$c = a();
echo $c->current();//会输出23但是不会输出1
//遍历则会输出0=>23 1
foreach ($c as $k => $v) {
    echo $k . "=>". $v . PHP_EOL;
}

多条语句
function a() {
    yield 1;
    yield 2;
    yield 3;
}
$c = a();
//输出0=>1 1=>2 2=>3
foreach ($c as $k => $v) {
    echo $k . "=>". $v . PHP_EOL;
}
特性:每次迭代都只会执行前一次yield语句之后的代码,那Generator可以用于实现协程的原因。

3.用途
可以用来做协程
可以用来大量数据的集合(节约空间)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python3

习题22:更多的练习

这是函数的工作原理,记住函数内部的变量都是临时的,当你的函数返回以后,返回值可以被赋予一个变量,这里是创建了一个新变量,用来存放函数的返回值

951
来自专栏企鹅号快讯

php的变量引用与销毁机制

在php中,符号"&"表示引用。 1、看看不引用的情况是这样子: $a = "hello world";//定义一个变量,下面赋值给$b $b = $a;//...

2719
来自专栏java一日一条

一个Java对象到底占用多大内存

大家可以用这个代码边看边验证,注意的是,运行这个程序需要通过javaagent注入Instrumentation,具体可以看原博客。我今天主要是总结下手动计算J...

791
来自专栏nummy

ECMAScript 6 特性ECMAScript 6 特性

ECMAScript 6,也被称做ECMAScript 2015,是ECMAScript标准的下一个版本。这个标准预计将于2015年6月被正式批准。ES6是这门...

831
来自专栏IT探索

g++&&gcc

3.C++:在构造函数中,当使用初始化列表来初始化成员变量时,如果初始化顺序与定义成员变量的顺序不一致,当使用-Wreorder选项时,会重新调整顺序初始化顺序...

711
来自专栏烂笔头

Python标准库笔记(8) — pprint模块

目录[-] pprint —— 更美观的打印数据结构 pprint 模块包含一个“美观打印器(PrettyPrinter)”,用于产生美观的数据结构视...

4535
来自专栏郭少华

ES6

在cmd命令窗口初始化项目-y代表全部默认同意,就不用一次次按回车了。命令执行完成后,会在项目根目录下生产package.json文件。

1603
来自专栏本立2道生

python中的编码与解码

编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显示00110101,还是要显...

1191
来自专栏尾尾部落

[LeetCode]1-bit and 2-bit Characters 1位和2位字符

链接:https://leetcode.com/problems/1-bit-and-2-bit-characters/description/ 难度:Eas...

1311
来自专栏Python研发

go基础编程 day-1

        导入单个包                                                                   ...

871

扫码关注云+社区

领取腾讯云代金券