国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP生成器--動態生成內容的數組

klinson / 510人閱讀

摘要:定義生成器動態生成內容的數組,用到值的時候才去生產。其他僅驗證了版本可以使用之后,可以調用生成器數組使用等。傳送門手冊里都有

定義:

生成器:“動態生成內容的數組”,用到值的時候才去生產。
搭配使用:關鍵字 yield foreach

過程:

作為生成器的方法相當于定義了一個數組;

生成器中的 yield,每次出現相當于定義了一個數組中出現的值;

foreach 會遍歷生成器中所有的 yield 定義的值(某個被定義的值(表達式),只有在被用到的時候,當前yield同上一個yield之間的其他表達式才會被執行,當前yield之后的表達式不會被執行);

foreach 正常結束的話(不是break),判斷一下生成器中最后一個yield之后是否有其他表達式未執行完,是的話,執行之;

不同于線程,不是并行執行,只是在主業務邏輯和生成器之間來回切換執行,只節省了空間,時間沒省下來。

設想使用場景:

1、取大數據文件,生成器中逐行讀取;
2、???

例子:
  gen.php
  1  $val) {
 17     echo "使用數據前" . PHP_EOL;
 18     echo "使用數據:" . $val . PHP_EOL;
 19     echo "使用數據后" . PHP_EOL;
 20     //if ($key >= 4) {
 21         //break;
 22     //} 
 23 }
執行結果:
php gen.php
生成器開始執行了嗎?
生成器開始執行
產生數據之前:0
使用數據前
使用數據:0
使用數據后
產生數據之后:0
產生數據之前:1
使用數據前
使用數據:1
使用數據后
產生數據之后:1
產生數據之前:2
使用數據前
使用數據:2
使用數據后
產生數據之后:2
產生數據之前:3
使用數據前
使用數據:3
使用數據后
產生數據之后:3
產生數據之前:4
使用數據前
使用數據:4
使用數據后
產生數據之后:4
再來一個數據
使用數據前
使用數據:5
使用數據后
生成器執行結束
部分執行過程解讀:

1、14行并沒有調用生成器gen(),只是做了定義;
2、進入 foreach 循環后,開始調用gen();
3、$val 需要值的時候,記住當前位置a,執行生成器;
4、執行到 yield 定義的地方,取到值了,記住當前位置b,返回位置a;
5、循環3、4兩步;
6、循環結束,執行完 yield 最后一次定義的地方的之后的剩下部分;
7、去掉20、21、22行的注釋后執行,"使用數據:4 使用數據后",就不再有其他輸出。

其他(僅驗證了PHP7.1.14版本)

1、$data = (yield $value);//YES $data = yield $value;//NO
2、可以使用yield $key => $val;
3、PHP7之后,yield from 可以調用生成器、數組、使用return等。
(傳送門:PHP手冊里都有)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28755.html

相關文章

  • PHP內存模型

    摘要:為單進程的由代執行每一個請求由從進程池中取出進程初始化數據結構創建進程變量共享類似于的內容為所有進程所共享即單例模式默認是采用磁盤文件實現的管理即變量是一次請求說單獨的享有的不能被所有請求所共享共享由于每次請求代由創建進程所以由共享問題是使 php為單進程的,由apache代執行,每一個請求,由apache從進程池中取出進程,初始化數據結構,創建進程. 變量共享,類似于session的...

    Maxiye 評論0 收藏0
  • (PHP7內核剖析-8) 類

    摘要:父類方法為錯誤,成員方法不得被重寫。父子類方法靜態屬性不一致父類方法為非靜態而子類的是靜態或相反,錯誤。 1.類的結構 類是編譯階段的產物,而對象是運行時產生的,它們歸屬于不同階段。編譯完成后我們定義的每個類都會生成一個zend_class_entry,它保存著類的全部信息,在執行階段所有類相關的操作都是用的這個結構, struct _zend_class_entry { ch...

    JohnLui 評論0 收藏0
  • ajax概述

    摘要:換一臺電腦就要重新安裝。并且還需要適配不同的系統。提交大小幾乎沒有限制。即協議主要由請求和響應組成。相反則為同步按照程序的順序,依次往下執行,必須等上一程序執行完成之后才能執行下一程序,阻礙程序的執行。 Ajax 服務器 類型 按照服務類型:文件服務器,數據庫服務器,郵件服務器,Web服務器 按照操作系統:Linux服務器,Windows服務器 按照應用軟件:Apache服務器,Ng...

    Achilles 評論0 收藏0
  • 基于 Swoole 構建 CTF AWD 比賽環境搭建與實踐

    摘要:出題思路本次題目來自于我的一個外包項目實踐。回合制比賽以分鐘為一回合。選手在比賽過程中需要盜取到對手的密鑰,以竊聽他方內容,并修改己方密鑰以放泄露動態該部分同樣由中心服務器與完成。 Author: RytiaDate: 20190427Blog: www.zzfly.net本人才學疏淺,望君不吝賜教 背景 受學校老師邀請,為學弟學妹舉辦分享會介紹 AWD 相關經驗,本人一時頭腦風暴采用...

    GitCafe 評論0 收藏0
  • php底層原理之變量(一)

    摘要:對于來說,變量有全局變量和局部變量之分那么,他們都是存儲到一個哈希表內了么其實不是的,變量存儲也有作用域的概念。 上次跟大家講了垃圾回收機制后,有些小伙伴對底層原理比較感興趣,私信問我了一些關于變量的相關知識,既然大家對變量比較感興趣,那么這次我們來系統的講一下變量的底層原理 變量結構 首先,我們還是先擺上我們的zval結構體,即php所有變量都會以zval結構體的形式實現 struc...

    curlyCheng 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<