当前位置:首页 > PHP

yield 实现php

2026-01-30 03:46:31PHP

yield 关键字在 PHP 中的实现

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

基本语法

生成器函数使用 yield 关键字返回值,而不是 return。每次调用生成器的 next() 方法时,函数会从上次暂停的位置继续执行。

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

$generator = generatorExample();
foreach ($generator as $value) {
    echo $value . "\n";
}

键值对生成

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

yield 实现php

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

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

生成器委托

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

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

function anotherGenerator() {
    yield 4;
    yield 5;
}

$generator = delegateGenerator();
foreach ($generator as $value) {
    echo $value . "\n";
}

内存效率

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

yield 实现php

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

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

生成器与返回值

生成器函数可以使用 return 返回一个最终值,该值可以通过 getReturn() 方法获取。

function generatorWithReturn() {
    yield 'value1';
    yield 'value2';
    return 'final value';
}

$generator = generatorWithReturn();
foreach ($generator as $value) {
    echo $value . "\n";
}
echo $generator->getReturn() . "\n";

实际应用场景

生成器常用于文件处理、数据库查询结果遍历、API 分页数据获取等场景,避免内存溢出。

function readLargeFile($fileName) {
    $file = fopen($fileName, 'r');
    while (!feof($file)) {
        yield fgets($file);
    }
    fclose($file);
}

$generator = readLargeFile('large_file.txt');
foreach ($generator as $line) {
    echo $line;
}

生成器提供了一种灵活且高效的方式来处理需要延迟计算或大数据集的情况,是 PHP 中强大的功能之一。

标签: yieldphp
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现递归

php实现递归

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

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。…