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.用途
可以用来做协程
可以用来大量数据的集合(节约空间)


Tagged . Bookmark the permalink.

Comments are closed.