日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php之生成器

發布時間:2023/12/4 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php之生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引用手冊:一個生成器函數看起來像一個普通的函數,不同的是普通函數返回一個值,而一個生成器可以yield生成許多它所需要的值。當一個生成器被調用的時候,它返回一個可以被遍歷的對象.當你遍歷這個對象的時候(例如通過一個foreach循環),PHP 將會在每次需要值的時候調用生成器函數,并在產生一個值之后保存生成器的狀態,這樣它就可以在需要產生下一個值的時候恢復調用狀態。

以下這句話會讓讓上面手冊的內容更加的理解明白。
yield關鍵字 :生成器函數的核心是yield關鍵字。它最簡單的調用形式看起來像一個return申明,不同之處在于普通return會返回值并終止函數的執行,而yield會返回一個值給循環調用此生成器的代碼并且只是暫停執行生成器函數。

為什么要用生成器?手冊上說道,一個簡單的例子就是使用生成器來實現range函數;因為如果使用range函數生成一個很大的數組的時候,那么占用內存是非常大的,所以使用生成器可以很好的解決這個問題。

注:請使用5.4以上版本

我在這里使用手冊里面的例子來說明一下使用生成器實現range函數;在這里我把手冊的演示刪除了一點代碼,這樣就可以專注來說生成器了:

先看一個最簡單的例子:

<?php //定一個函數 function gen_one_to_three() {//for循環for ($i = 1; $i <= 3; $i++) {//注意變量$i的值在不同的yield之間是保持傳遞的。yield $i;} }//yield會返回一個值給循環調用此生成器的代碼并且只是暫停執行生成器函數。 $generator = gen_one_to_three(); foreach ($generator as $value) {echo "$value\n"; } ?>

隨后輸出了 1 2 3

我們再看以下xrange實現(我刪掉了一些代碼):

<?php //定義xrange函數 function xrange($start, $limit, $step = 1) {//如果start小于limit那么就if ($start < $limit) {//yield會返回一個值給循環調用此生成器的代碼并且只是暫停執行生成器函數。for ($i = $start; $i <= $limit; $i += $step) {yield $i;}} else {//yield會返回一個值給循環調用此生成器的代碼并且只是暫停執行生成器函數。for ($i = $start; $i >= $limit; $i += $step) {yield $i;}} }/* * 注意下面range()和xrange()輸出的結果是一樣的。*/echo 'Single digit odd numbers from range(): '; //在這里使用range函數 foreach (range(1, 9, 2) as $number) {echo "$number "; } echo "<br/>";echo 'Single digit odd numbers from xrange(): '; //在這里我們使用自定義的xrange //注意:yield會返回一個值給循環調用此生成器的代碼并且只是暫停執行生成器函數。 //所以她們的輸出是相同的 foreach (xrange(1, 9, 2) as $number) {echo "$number "; } ?>

輸出如下如下:

生成一個鍵值對:這里使用的也是php手冊里面的例子,在這里我把解釋寫在了代碼的注釋中了

<?php /* * 下面每一行是用分號分割的字段組合,第一個字段將被用作鍵名。*///input變量 $input = <<<'EOF' 1;PHP;Likes dollar signs 2;Python;Likes whitespace 3;Ruby;Likes blocks EOF;//定義方法 參數為input function input_parser($input) {foreach (explode("\n", $input) as $line) {//使用explode方法用\n分隔$input字符串為數組 并且使用了foreach$fields = explode(';', $line); //分隔$line的值,此時line的值中例如 1;PHP;Likes dollar signs 用分號分隔為數組$id = array_shift($fields);//使用array_shift刪除數組的第一個值并且返回,那么如上注釋中說的,那么此時應該id就是1yield $id => $fields; //返回鍵值對} }//調用input_parser函數,傳入input foreach (input_parser($input) as $id => $fields) {echo "$id:\n";echo " $fields[0]\n";echo " $fields[1]\n"; } ?>

運行如下:

身體不適。。。運動過度。。。今天就一篇吧。。。

總結

以上是生活随笔為你收集整理的php之生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。