php中yield的用法_廖圣平的博客-CSDN博客_php yield


本站和网页 https://blog.csdn.net/qq_22823581/article/details/91491082 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

php中yield的用法_廖圣平的博客-CSDN博客_php yield
php中yield的用法
廖圣平
已于 2022-11-21 18:41:12 修改
22817
收藏
21
分类专栏:
php
文章标签:
php
开发语言
于 2019-06-12 10:33:16 首次发布
希望对您有所帮助;知识共享,欢迎转载,转载时:请附上原文链接!
本文链接:https://blog.csdn.net/qq_22823581/article/details/91491082
版权
php
专栏收录该内容
160 篇文章
3 订阅
订阅专栏
之前有听过php 中自身也有协程,查看找了下并学习。
demo已上传 我的github笔记
yield 解决的问题
解决运行内存的瓶颈,php程序中的变量存储在内存中,之前有遇到过读取Excel文件时候,会出现内存不足,出现:
Fatal Error: Allowed memory size of xxxxxx bytes
所以会设置php 最大运行内存的设置: ini_set('memory_limit', '200M')
但是当我们读取5g 这么大的文件的时候,我们运行内存可能就吃不消了,所以会选择yield
初识Yield
运行:
<?php
function createRange($number){
$data = [];
for($i=0;$i<$number;$i++){
$data[] = time();
return $data;
$data =createRange(10);
foreach($data as $value){
sleep(1);//这里停顿1秒,我们后续有用
echo $value.PHP_EOL;
时间是一样的。如果采用yield:
<?php
function createRange($number){
for($i=0;$i<$number;$i++){
yield time();
$data =createRange(10);
foreach($data as $value){
sleep(1);//这里停顿1秒,我们后续有用
echo $value.PHP_EOL;
时间则间隔一秒钟,所以通过yield 的例子知道,不是像第一个例子中把for 循环的内容储存在内存中,而是一个一个消耗。
读取文件的例子
创建一个txt 文件写入:
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
<?php
function readTxt()
# code...
$handle = fopen("./test.txt", 'rb');
while (feof($handle)===false) {
# code...
yield fgets($handle);
fclose($handle);
foreach (readTxt() as $key => $value) {
# code...
sleep(1);
echo $value;
用php 读取文件,则是一行一行的读取 到这边,大概知道了yield 的作用了,之后咱再深入
参考文章
大文件导入导出优化
关注博主即可阅读全文
廖圣平
关注
关注
点赞
21
收藏
打赏
评论
php中yield的用法
之前有听过php 中自身也有协程,查看找了下并学习。yield 解决的问题解决运行内存的瓶颈,php程序中的变量存储在内存中,之前有遇到过读取Excel文件时候,会出现内存不足,出现:Fatal Error: Allowed memory size of xxxxxx bytes 所以会设置php 最大运行内存的设置: ini_set('memory_limit', '200M')但是...
复制链接
扫一扫
专栏目录
PHP yield关键字功能与用法分析
10-17
主要介绍了PHP yield关键字功能与用法,结合实例形式分析了php5.5新增的yield关键字功能与相关使用技巧,需要的朋友可以参考下
PHP的yield:一个以时间换空间的方法
qq_28347599的博客
10-22
190
今天在闲逛PHP的官方文档的时候,发现了这么个用法:yield,叫 生成器
官方是这么描述的
(PHP 5 >= 5.5.0, PHP 7)
生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。
生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是,
评论 1
您还未登录,请先
登录
后发表或查看评论
PHP5.5新特性之yield理解与用法实例分析
10-17
主要介绍了PHP5.5新特性之yield理解与用法,结合实例形式分析了php5.5 yield生成器功能、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
php 使用 yield 批量处理文件并读取大数据导入数据库
最新发布
qq_27080351的博客
10-13
673
【代码】php 使用 yield 批量处理文件并读取大数据导入数据库。
php yield 导出,PHP yield 生成器用法探究(一)
weixin_36057489的博客
03-10
246
写在前面这篇文章,要和你们探讨的是 PHP yield 在 生成器用法,不带 foreach,for, while 循环的那种。就讨论 yield 将一个函数变成为生成器的用法。php关于yield 特性,是在开发PHP5 时被提上日程,PHP5.5 版本正式加入。关于yield的使用,我看到大部分文章都停留在,使用yield如何在foreach中传出数据,今天想给你们讲讲 生成器 全部语法。g...
PHP生成器yield的使用,节省了大量内存,性能也明显提升
疯子源
09-02
610
官方解释yield
yield生成器是php5.5之后出现的,官方文档这样解释:yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。
生成器的核心是一个yield关键字,一个生成器函数看起来像一个普通的函数,不同的是:普通函数返回一个值,而一个生成器可以yield生成许多它所需要的值。生成器函数被调用时,返回的是一个可以被遍历的对象。
yield和return有点类似,不过不同的是,return会返回值并且终止代码...
php之 yield
dj1540225203的博客
02-28
2554
假设1000个并发同时进行访问某个接口;而接口中某个处理需要用到一个大数组;而这个大数组占用内存30M;该方法需要5秒处理完并且销毁大数组;那么使用原来的常规foreach需要花费内存:1000*30*5 (根据服务器性能配置不同,需要的内存是不一样的!性能高的内存小点)
public function actionIndex($message = 'hello world')
$valuesArray = [];
// 获取初始内存使用量
PHP yield简介
无痕之意的博客
12-13
5965
一、yield介绍
 文档介绍说道:生成器函数的核心是yield关键字。它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。
 说了这么多到底是个东西呢,只有自己亲自动手写代码才知道。
二、range函数探索
 1、首先看下我们常用的一个产生数组的函数range()
$...
php yield
leedaning的专栏
12-31
255
最近发现了一个有意思的功能——生成器(generator),按我的理解,生成器可以生成类似数组的对象,这些对象也可以通过遍历取出,与数组很像,但是里面每个元素都是对象。
官方文档在此:https://www.php.net/manual/zh/language.generators.syntax.php
官方给的实例如下:
<?php
function gen_one_to_three() {
for ($i = 1; $i <= 3; $i++) {
//注意变量$i的
php使用yield进行大量数据处理方法
yan_dk的专栏
11-23
1169
我们在处理大量数据,比如100万数据导入数据库,一般常规方法如果使用普通循环做逐个处理,很快会导致内存崩溃,无法实现正常的处理。php提供了yield方法来处理。我们看看如何来做的吧。
for($i=0;$i<1000000;$i++){
echo $i;
//这里处理业务数据
我们看到上面是,普通循环100万次处理,这样处理如果仅输出$i,比较小,但累计起来也会使电脑变得很慢,直至内存耗尽程序崩溃,如果是数据导入,需要每次连接数据库非常耗内存操作的话,会很快崩溃。所以...
PHP yield 分析(详细)
勿忘初心
12-15
573
PHP yield 分析
参考资料
http://www.laruence.com/2015/05/28/3038.html
http://php.net/manual/zh/class.generator.php
http://www.cnblogs.com/whoamme/p/5039533.html
http://php.net/manual/zh/class.iterator....
PHP生成器的使用yield性能优化
qq_32421489的博客
03-08
261
什么是生成器?
听着高大上的名字,感觉像是创造什么东西的一个功能,实际上,生成器是一个用于迭代的迭代器。它提供了一种更容易的方式来实现简单的对象迭代,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。
说了半天不如直接看看代码更直观。
functiontest1()
for($i=0;$i<3;$i++){
yield$i+1;
yield1000;
yield1001;
foreac...
代码性能优化php,PHP中被忽略的性能优化利器:生成器
weixin_29560063的博客
03-10
38
如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生。但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显。但是,生成器功能的确非常有用。优点直接讲概念估计你听完还是一头雾水,所以我们先来说说优点,也许能勾起你的兴趣。那么生成器有哪些优点,如下:生成器会对PHP应用的性能有非常大的影响PHP代码运行时节省大量的内存比...
PHP yield理解
weixin_42593599的博客
09-09
704
一、场景
相信很多phper都会遇到这样的场景,操作数据库一次性请求返回结果集过大,而又需要对结果集进行处理从而导致PHP内存开销过大
PHP生成器yield的用法
HTML1033808020的博客
03-29
208
问题:
工作中,经常会遇到处理大量数据的情况,比如读一个大的文件,然后对文件内容做处理,例如:
<?php
function read_txt($file)
$data = [];
$handle = fopen($file, 'r');
while (!feof($handle)) {
$data[] = fgets($handle);
fclose($handle);
return $data;
function
PHP5.5迭代生成器用法实例详解
橙虚缘空间
12-02
740
PHP5.5引入了迭代生成器的概念,迭代的概念早就在PHP有了,但是迭代生成器是PHP的一个新特性,这跟python3中的迭代生成器类似,看看PHP5.5的迭代生成器如何定义。<?php
function xrange($start, $end, $step = 1) {
for ($i = $start; $i <= $end; $i += $step) {
yi...
php处理大数据量数据的思路
weixin_37157891的博客
05-11
7225
大数据量的业务场景:excel 导出百万数据,操作百万数据的数组,从数据库表中取出百万数据。两个解决思路:1.从环境配置上,比如调高php脚本的内存限制。ini_set('memory_limit','');2.从代码层面,比如前两种,都是数据先写到内存后输出,大数据量的情况下,内存非常容易写爆。 解决思路就是分批次处理。excel导出解决方案可以看我之前博文,有相应的代码示例。 操作...
yield+php+作用,PHP5.5新特性之yield理解与用法实例分析
weixin_34831191的博客
03-16
72
本文实例讲述了PHP5.5新特性之yield理解与用法。分享给大家供大家参考,具体如下:yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。yield生成器允许你 在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组。使用示例:/*** 计算平方数列* @p...
php yeild,PHP 用 yIEld 实现异步 Web server
weixin_29192211的博客
03-11
503
php在php5.5的时候引入了generator和coroutine,从核心上提出了一种方法去写不阻塞的IO,当然这和node的event loop还是有比较大的区别的,它的主要理念是:把几个大任务分别分成多个小步轮流执行,有某个小任务在等待系统io的话,就跳过它,执行下一个小任务,这样总体提升了代码的效率。0x1: yield表达式是什么?非常简单,描述yield表达式的只有两个关键词: 中断...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:酷酷鲨
设计师:CSDN官方博客
返回首页
廖圣平
CSDN认证博客专家
CSDN认证企业博客
码龄8年
暂无认证
470
原创
5596
周排名
1422
总排名
122万+
访问
等级
1万+
积分
6726
粉丝
174
获赞
142
评论
677
收藏
私信
关注
热门文章
php 获取当前目录和当前文件夹
44584
linux 下查看有当前文件夹有多少个文件
31593
UML图学习入门
27969
Integrity constraint violation 数据库插入错误
27421
composer更新指定包||composer 常用命令
27111
分类专栏
K8s直通车
付费
5篇
正则
1篇
创业
内网穿透
1篇
云原生
4篇
golang
14篇
资源
dcat-admin
1篇
laravel-admin
6篇
uniapp
2篇
Passport
2篇
基础知识
1篇
tailwind
1篇
livewire
3篇
Vagrant
2篇
虚拟机
1篇
php-sdk
1篇
codeception
3篇
php封装 | composer推荐与使用
8篇
yii
6篇
laravel
8篇
Yaf
7篇
支付宝
1篇
jquery
9篇
javascript
49篇
thinkphp
61篇
php
160篇
mysql
13篇
css
13篇
openwrt
linux
13篇
合同
html
13篇
ps
虚拟主机
1篇
微信开发
11篇
图片素材
1篇
vue.js
2篇
php,安全
5篇
第三方类
2篇
阿里云
3篇
软件
3篇
sql
8篇
nodejs
2篇
windows
2篇
discuz
1篇
swool
1篇
bog
git
9篇
swoole
1篇
提问
1篇
抓包
2篇
运维
12篇
elk
3篇
消息队列
1篇
oauth
3篇
微服务
分布式
1篇
yaf
7篇
nginx
6篇
数据库中间件
apache
2篇
yii
7篇
vue
1篇
charles
2篇
内容
5篇
封装
1篇
程序人生
2篇
docker
9篇
Redis
compsoer
6篇
laravel
33篇
mysql设计
1篇
最新评论
laravel + tailwind 自适应头部部分
xiaodunmeng:
laravle7 是sass了,npm run dev 直接就不通过的,
php中yield的用法
programmer_ada:
哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加除了各种控件外,文章正文的字数;(2)使用标准目录;(3)增加条理清晰的目录。
laravel-admin 自定义action
廖圣平:
肯定不行啊,你没有让composer 加载这个程序,要使用 composer require 命令安装
laravel-admin 自定义action
weixin_41700995:
你好,我下载到另一个文件夹了,然后把liaosp这个文件夹考到项目的vendoer目录下了,然后按照您的方法使用了,报错RowAction方法找不到,还需要配置哪里吗?求回复谢谢
gin自定义验证器转化中文
★星星☆:
字段名也翻译成中文的参与这个:https://www.jianshu.com/p/51b9cd2006a8
只要加两步:
1、struct中再加上label:"字段名翻译";
2、validator的第30行再加上下面代码即可:
```go
Validate.RegisterTagNameFunc(func(field reflect.StructField) string {
label := field.Tag.Get("label")
if label == "" {
return field.Name
return label
})
```
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
laravel/installer laravel 安装
wsl 跑定时任务
mysql 时间加索引加速查询
2022年29篇
2021年59篇
2020年29篇
2019年100篇
2018年129篇
2017年136篇
2016年16篇
目录
目录
分类专栏
K8s直通车
付费
5篇
正则
1篇
创业
内网穿透
1篇
云原生
4篇
golang
14篇
资源
dcat-admin
1篇
laravel-admin
6篇
uniapp
2篇
Passport
2篇
基础知识
1篇
tailwind
1篇
livewire
3篇
Vagrant
2篇
虚拟机
1篇
php-sdk
1篇
codeception
3篇
php封装 | composer推荐与使用
8篇
yii
6篇
laravel
8篇
Yaf
7篇
支付宝
1篇
jquery
9篇
javascript
49篇
thinkphp
61篇
php
160篇
mysql
13篇
css
13篇
openwrt
linux
13篇
合同
html
13篇
ps
虚拟主机
1篇
微信开发
11篇
图片素材
1篇
vue.js
2篇
php,安全
5篇
第三方类
2篇
阿里云
3篇
软件
3篇
sql
8篇
nodejs
2篇
windows
2篇
discuz
1篇
swool
1篇
bog
git
9篇
swoole
1篇
提问
1篇
抓包
2篇
运维
12篇
elk
3篇
消息队列
1篇
oauth
3篇
微服务
分布式
1篇
yaf
7篇
nginx
6篇
数据库中间件
apache
2篇
yii
7篇
vue
1篇
charles
2篇
内容
5篇
封装
1篇
程序人生
2篇
docker
9篇
Redis
compsoer
6篇
laravel
33篇
mysql设计
1篇
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
廖圣平
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值