鍍金池/ 問答/PHP  C  網(wǎng)絡(luò)安全/ 求解答:yield 方式寫法跟這種調(diào)用的寫法什么區(qū)別?

求解答:yield 方式寫法跟這種調(diào)用的寫法什么區(qū)別?

yield 方式寫法跟這種調(diào)用的寫法什么區(qū)別?

//普通方式
function getLines($file){
        $file = fopen($file,'r');
        try{
            while(! feof($file)){
                $line = fgets($file);
                show($line);
            }
        }finally{
            fclose($file);
        }
    }

    function show($line){
        echo $line.'<br>';
    }
    
    $data = getLines('1.csv');

//生成器方式

function getLines($file){
        $file = fopen($file,'r');
        try{
            while(! feof($file)){
                $line = fgets($file);
                yield $line;
            }
        }finally{
            fclose($file);
        }
    }

    $data = getLines('1.csv');
    foreach($data as $n=>$line){
        echo $line.'<br>';
    }
回答
編輯回答
安淺陌

你寫的代碼本職區(qū)別就是協(xié)程理念

在你這段代碼里除了多了概念,運(yùn)行基本區(qū)別沒有,都是一次fgets阻塞,實(shí)際是沒有利用協(xié)程讓什么cpu

2017年9月10日 23:08
編輯回答
柒喵

使用yield可以節(jié)省內(nèi)存,生成的數(shù)據(jù)是foreach每遍歷一條便執(zhí)行一次,不用將所有數(shù)據(jù)一次性加載到內(nèi)存中

2018年5月1日 08:31
編輯回答
青瓷

每次進(jìn)行yield操作, 可以把程序的控制權(quán)從函數(shù)內(nèi)移到函數(shù)外, 同時(shí)可以給yield語句往內(nèi)傳值.

2017年12月31日 16:17