• 技术文章 >后端开发 >PHP问题

    php中yield的用法是什么

    醉折花枝作酒筹醉折花枝作酒筹2021-05-27 17:35:46转载151
    本篇文章给大家介绍一下php中yield的用法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    之前有听过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 的作用了,之后咱再深入

    推荐学习:php视频教程

    以上就是php中yield的用法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:php yield
    上一篇:php如何去掉两边空格 下一篇:PHP如何使用加密伪随机数生成器
    第16期线上培训班

    相关文章推荐

    • PHP八大设计模式具体有哪些?• 如何处理​PHP 表单?如果是你你会怎样处理呢?• php如何设置程序运行时间• php怎么去掉字符串中重复的字母• php如何去掉两边空格

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网