当前位置:首页 > PHP

yield 实现php

2026-02-15 01:36:06PHP

yield 在 PHP 中的实现

yield 是 PHP 中用于生成器(Generator)的关键字,允许在函数中暂停执行并返回一个值,后续可以从暂停的位置继续执行。生成器提供了一种高效的方式来处理大量数据或延迟计算,避免一次性加载所有数据到内存。

基本语法

生成器函数使用 yield 关键字返回值,而不是 return。调用生成器函数时,会返回一个 Generator 对象,可以通过迭代器接口(如 foreach)逐步获取值。

yield 实现php

function generatorExample() {
    yield 'value1';
    yield 'value2';
    yield 'value3';
}

$generator = generatorExample();
foreach ($generator as $value) {
    echo $value . PHP_EOL;
}

键值对生成

yield 不仅可以返回值,还可以返回键值对,类似于关联数组。

function keyValueGenerator() {
    yield 'key1' => 'value1';
    yield 'key2' => 'value2';
}

$generator = keyValueGenerator();
foreach ($generator as $key => $value) {
    echo "$key: $value" . PHP_EOL;
}

生成器委托

PHP 7.0 引入了 yield from 语法,允许生成器委托给另一个生成器或可迭代对象。

yield 实现php

function delegateGenerator() {
    yield 1;
    yield from [2, 3];
    yield from anotherGenerator();
}

function anotherGenerator() {
    yield 4;
}

$generator = delegateGenerator();
foreach ($generator as $value) {
    echo $value . PHP_EOL;
}

生成器与内存效率

生成器特别适合处理大量数据,因为它们不会一次性将所有数据加载到内存中,而是按需生成。

function largeDatasetGenerator($start, $end) {
    for ($i = $start; $i <= $end; $i++) {
        yield $i;
    }
}

$generator = largeDatasetGenerator(1, 1000000);
foreach ($generator as $number) {
    echo $number . PHP_EOL;
}

生成器与协程

生成器可以用于实现简单的协程(Coroutine),通过双向通信(send() 方法)在生成器和调用者之间传递数据。

function coroutineExample() {
    $input = yield;
    echo "Received: $input" . PHP_EOL;
    $input = yield;
    echo "Received: $input" . PHP_EOL;
}

$generator = coroutineExample();
$generator->send('Hello');
$generator->send('World');

注意事项

  • 生成器函数不能包含 return 语句返回值(但可以用于终止生成器)。
  • 生成器是一次性的,遍历完成后无法再次使用。
  • 生成器对象实现了 Iterator 接口,可以直接用于 foreach 循环。

标签: yieldphp
分享给朋友:

相关文章

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…