php 生成ai文件,php_Generator php 生成器
php_Generator php 生成器
一個(gè)生成器函數(shù)看起來像一個(gè)普通的函數(shù),不同的是普通函數(shù)返回一個(gè)值,而一個(gè)生成器可以yield生成許多它所需要的值。當(dāng)一個(gè)生成器被調(diào)用的時(shí)候,它返回一個(gè)可以被遍歷的對象.當(dāng)你遍歷這個(gè)對象的時(shí)候(例如通過一個(gè)foreach循環(huán)),PHP 將會在每次需要值的時(shí)候調(diào)用生成器函數(shù),并在產(chǎn)生一個(gè)值之后保存生成器的狀態(tài),這樣它就可以在需要產(chǎn)生下一個(gè)值的時(shí)候恢復(fù)調(diào)用狀態(tài)。一旦不再需要產(chǎn)生更多的值,生成器函數(shù)可以簡單退出,而調(diào)用生成器的代碼還可以繼續(xù)執(zhí)行,就像一個(gè)數(shù)組已經(jīng)被遍歷完了.
Note:一個(gè)生成器不可以返回值: 這樣做會產(chǎn)生一個(gè)編譯錯(cuò)誤。然而return空是一個(gè)有效的語法并且它將會終止生成器繼續(xù)執(zhí)行。
yield關(guān)鍵字:
生成器函數(shù)的核心是yield關(guān)鍵字。它最簡單的調(diào)用形式看起來像一個(gè)return申明,不同之處在于普通return會返回值并終止函數(shù)的執(zhí)行,而yield會返回一個(gè)值給循環(huán)調(diào)用此生成器的代碼并且只是暫停執(zhí)行生成器函數(shù)。
DEMO:
// 生成器語法
function xrange($start, $limit, $step){
if ($start < $limit) {
if ($step < 0) {
throw new LogicException('step must +ve');
}
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
} else {
if ($step >= 0) {
throw new LogicException('step must be -ve');
}
for ($i = $step; $i >= $limit; $i += $step) {
yield $i;
}
}
}
print_r(xrange(1, 9, 2));
// 使用php生成器實(shí)現(xiàn)range的函數(shù)功能
$newarr = array();
foreach(xrange(1, 9, 2) as $key => $val){
array_push($newarr, $val);
}
print_r($newarr);
echo "
";
echo '使用range生成數(shù)組
';
print_r(range(1, 9, 2));
結(jié)果:
Generator Object ( )
Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )
使用range生成數(shù)組
Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )
php 中的yield類似于 js, python 中的 yield 作用.
總結(jié)
以上是生活随笔為你收集整理的php 生成ai文件,php_Generator php 生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 等频直方图,等频直方图预估
- 下一篇: php代码编辑器6,优秀的PHP代码编辑