簡單例子
//包含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"竟然沒有調用,在一直遍歷的情況下才調用