<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] ## 應用場景 > yeild實質上是一個Generator迭代器,所以如果讀取大數據時,其實質只會保留迭代器一條數據的內存空間。 > 1. 生成器會對PHP應用的性能有非常大的影響 > 2. PHP代碼運行時節省大量的內存 > 3. 比較適合計算大量的數據 > 比如:處理過大的Excel文件或者大數據時,容易出現內存不足,就可以使用yield來解決 ``` Fatal Error: Allowed memory size of xxxxxx bytes ``` > [參考實例](https://www.cnblogs.com/zuochuang/p/8176868.html) ## (一) 初識Yield ### 未使用yield ``` function createRange($number){ $data = []; for($i=0;$i<$number;$i++){ $data[] = time(); } return $data; } $data =createRange(10); foreach($data as $value){ # 停頓1秒 sleep(1); echo $value.PHP_EOL; } ``` ![](https://img.kancloud.cn/d1/81/d181d9ffc9fac8c900e9814fac3cdf97_543x250.png) > 時間是一樣的,因為是一次性加載到$data[]數組中的; ### 采用yield ``` function createRange($number){ for($i=0;$i<$number;$i++){ yield time(); } } $data =createRange(10); foreach($data as $value){ # 這里每一次的foreach循環時,都會去createRange()里的yield迭代器讀取信息 # 至始至終只會保留一條數據的內存空間。 sleep(1); echo $value.PHP_EOL; } ``` ![](https://img.kancloud.cn/c3/8e/c38e52b7ee1ebf62913a8d98fdb31fd1_709x280.png) > 時間則間隔一秒鐘,所以通過yield 的例子知道,不是像第一個例子中把for 循環的內容儲存在內存中,而是一個一個消耗。 ## (二) 讀取文件的實例 ### 1. 創建一個txt | 行號 | 內容 | | --- | --- | | 1 | 第1行 | | 2 | 第2行 | | 3 | 第3行 | | 4 | 第4行 | | 5 | 第5行 | | 6 | 第6行 | | 7 | 第7行 | | 8 | 第8行 | ### 2. yield讀取txt ``` function readTxt() { $handle = fopen("./test.txt", 'rb'); while (feof($handle)===false) { # code... yield fgets($handle); } fclose($handle); } foreach (readTxt() as $key => $value) { sleep(1); echo $value; } ``` > 用php 讀取文件,則是一行一行的讀取 ![](https://img.kancloud.cn/35/48/3548569fda5aa4bde99728fd30c4745c_562x309.png) > 到這邊,大概知道了yield 的作用了,之后咱再深入
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看