yield
關(guān)鍵字在 PHP 中主要用于生成器(generator)的實(shí)現(xiàn)。生成器是一種可以返回多次值的特殊函數(shù),每次調(diào)用 next()
方法時(shí),它會(huì)從上次暫停的地方繼續(xù)執(zhí)行。這在處理大數(shù)據(jù)集、無限序列或需要逐步獲取結(jié)果的場(chǎng)景中非常有用。以下是使用 yield
的合適場(chǎng)景:
function readLargeFile($filename)
{
$file = fopen($filename, 'r');
while (($line = fgets($file)) !== false) {
yield $line;
}
fclose($file);
}
foreach (readLargeFile('largefile.txt') as $line) {
// 處理每一行數(shù)據(jù)
}
function fibonacci()
{
$a = 0;
$b = 1;
while (true) {
yield $a;
$temp = $a;
$a = $b;
$b = $temp + $b;
}
}
foreach (fibonacci() as $number) {
// 處理每個(gè)斐波那契數(shù)
if ($number > 100) {
break;
}
}
function getPaginatedData($page, $limit)
{
$offset = ($page - 1) * $limit;
// 模擬從數(shù)據(jù)庫(kù)或 API 獲取數(shù)據(jù)
$data = [
// ... 獲取數(shù)據(jù)
];
for ($i = $offset; $i < $offset + $limit && $i < count($data); $i++) {
yield $data[$i];
}
}
foreach (getPaginatedData(1, 10) as $item) {
// 處理每個(gè)數(shù)據(jù)項(xiàng)
}
總之,在需要逐步獲取結(jié)果、處理大數(shù)據(jù)集或創(chuàng)建無限序列的場(chǎng)景中,使用 yield
關(guān)鍵字可以帶來很多好處。