在一次遍歷檔案的時候,想起可以使用「yield」來減少記憶體占用,但很不幸在遞迴中遇到盲區了
<?php
function testrecursion(int $number)
else
}testrecursion(0);
php test.php
很驚訝,var_dump 按道理會輸出 1 到 100,為嘛乙個都不輸出呢?
看來遇到了盲區,為了一**竟,特意請教了群裡的某些大牛,幾番討論之後,豁然開朗
當函式中使用「yield」關鍵字時,不管裡面出現什麼邏輯,都會把整個函式提公升為乙個「生成器」,接下來我們看以下**
<?php
function testrecursion(int $number)
else
}$data = testrecursion(0);
var_dump($data);
由此可見,此時的函式已經變成了乙個生成器,如果沒有進行遍歷,不會執行任何**,我們來實踐一下php test.php
object(generator)#1 (0)
<?php
function testrecursion(int $number)
else
}$data = testrecursion(0);
foreach($data as $item)
咦,也不對啊,為啥var_dump只輸出數字1?不是有遞迴的麼?php test.php
int(1)
昂~~其實就是遞迴出了問題,因為遞迴的依然是個生成器,如果沒有任何的遍歷動作,並不會執行任何**。那怎麼辦呢?經過一番操作猛如虎,終於發現還有個神奇的語法「yield from」,來來來,我們再來實踐一下
<?php
function testrecursion(int $number)
else
}$data = testrecursion(0);
foreach($data as $item)
終於完美地解決了問題,看來盲區還真不少哈php test.php
int(1)
int(2)
int(3)
int(4)
int(5)
int(6)
int(7)
int(8)
int(9)
int(10)
...
關於「yield from」相關的知識,可以參考
php7中生成器的新特性 yield-from
記錄一次oracle使用記錄
使用oracle資料庫的專案到我這邊,需要修改,咱雖然 學過 oracle,但那畢竟已經過去了。哈哈。使用database configuration assistant 建立資料庫,建立快完的時候,說我沒有監聽啥的,然後 通過 net manager 建立了,qizhong1 其中選中的那個就是建...
關於 的一次使用記錄
使用場景 專案裡面在做乙個請求時候發現,不同的請求,有些請求會跳轉到 spring mvc的自定義方法中,有些卻不進去。自定義的方法 class com.zhuanche.car.web.resolver.adminbaseformargumentresolver adminbaseformargu...
Android studio第一次使用記錄
一 建立工程 這邊有模板可以選擇,可以直接選擇empty activity。二 配置 應用名稱 程式包名稱 本地位址 三 進入工程 首先布局layout 上圖各部分收縮省略圖 線性布局命令 linearlayout 插圖 imageview android layout width wrap con...