在一次遍历文件的时候,想起可以使用「yield」来减少内存占用,但很不幸在递归中遇到盲区了
一、神奇的空输出
代码
<?php
function testRecursion(int $number)
{
$number++;
var_dump($number);
if ($number < 100) {
testRecursion($number);
} else {
yield $number;
}
}
testRecursion(0);
运行结果
php test.php
很惊讶,var_dump 按道理会输出 1 到 100,为嘛一个都不输出呢?
二、生成器的前世今生
看来遇到了盲区,为了一探究竟,特意请教了群里的某些大牛,几番讨论之后,豁然开朗
当函数中使用「yield」关键字时,不管里面出现什么逻辑,都会把整个函数提升为一个「生成器」,接下来我们看以下代码
代码
<?php
function testRecursion(int $number)
{
$number++;
var_dump($number);
if ($number < 100) {
testRecursion($number);
} else {
yield $number;
}
}
$data = testRecursion(0);
var_dump($data);