PHP Generator::send() 方法

返回上一级

PHP Generator::send() 方法用于将一个值发送给生成器。

( PHP 5 >= 5.5.0, PHP 7 )

方法原型

PHP Generator::send() 方法的原型如下

public mixed Generator::send ( mixed $value )

从原型中可以看出,调用该方法需要将一个值作为参数,然后返回一个值。

调用 Generator::send() 方法会将传递的值作为 yield 表达式的结果,然后继续执行生成器。直到遇到下一次 yield 时生成器停止并且返回 yield 的值。

如果调用此方法时生成器不在 yield 表达式中,那么在发送值之前,首先会运行生成器,直到遇到第一个 yield 表达式。因此调用此方法前没必要使用 Generator::next() 调用 「 启动 」 PHP 生成器。

从某些方面说,调用 Generator::next() 方法倒是有点类似于调用 Generator::send(NULL)

参数说明

参数 说明
$value 要发送到生成器的值。该值将是生成器当前所在的 yield 表达式的返回值

返回值

返回生成器当前 yield 的值,如果 yield 不对值做任何修改的话,返回的值就是传递的参数

范例

我们写一个范例简单的演示下 send() 方法的使用

<?php
function printer() {
    echo "I'm printer!".PHP_EOL;
    while (true) {
        $string = yield;
        echo $string.PHP_EOL;
    }
}

$printer = printer();
$printer->send('Hello world!');
$printer->send('Bye world!');

运行上面这段代码,输出结果如下

I'm printer!
after yield:Hello world!
after yield:Bye world!

使用场景

我们可以使用 send() 来开启或停止一个永远可运行的生成器

<?php

function nums() {
    for ($i = 0; $i < 1000000; ++$i) {

        //从调用中获取一个值
        $cmd = (yield $i);

        if($cmd == 'stop')
            return;// 终止生成器
        }     
}

$gen = nums();
foreach($gen as $v)
{
    if( $v == 3 )
        $gen->send('stop');

    echo "{$v}\n";
}

运行结果如下

0
1
2
3

返回上一级

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.