当前位置:首页 > PHP

yield 实现php

2026-02-15 01:36:06PHP

yield 在 PHP 中的实现

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

基本语法

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

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 语法,允许生成器委托给另一个生成器或可迭代对象。

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() 方法)在生成器和调用者之间传递数据。

yield 实现php

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实现图片上传

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

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现apk下载

php实现apk下载

实现APK下载的PHP代码 创建一个简单的PHP脚本来处理APK文件的下载请求,确保文件传输正确且安全。 <?php $file = 'path/to/your/app.apk'; if (f…