php yield詳解

 

 

 

簡單例子

//包含yield的函數可以生成一個generator 對象,可以被foreach 遍歷
function Generator()
{
    for ($i = 0; $i < 3; $i++) {
        echo "輸出存在感1\n";
        yield $i;
        echo "輸出存在感2\n";
    }
}

echo "###返回對象1####\n";
var_dump(Generator());

echo "###返回對象####\n";

echo "###遍歷一次情況####\n";

foreach (Generator() as $value) {

    var_dump($value);
    break; //只遍歷一次的情況
}

echo "###遍歷一次情況####\n";

echo "###一直遍歷的情況####\n";

foreach (Generator() as $value) {

    var_dump($value); //遍歷多次

}

echo "###一直遍歷的情況####\n";

/*
    ###返回對象1####
    object(Generator)#1 (0) {
    }
    ###返回對象####
    ###遍歷一次情況####
    輸出存在感1
    int(0)
    ###遍歷一次情況####
    ###一直遍歷的情況####
    輸出存在感1
    int(0)
    輸出存在感2
    輸出存在感1
    int(1)
    輸出存在感2
    輸出存在感1
    int(2)
    輸出存在感2
    ###一直遍歷的情況####
 * */
1:在調用函數返回的時候,可以發現for裏面的語句並沒有執行
2:在遍歷一次的時候,可以發現調用函數,卻沒有正常的for循環3次,只循環了一次
3:在遍歷一次的情況時,"存在感2"竟然沒有調用,在一直遍歷的情況下才調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章