時(shí)間:2023-05-05 00:27:02 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-05 00:27:02 來(lái)源:網(wǎng)站運(yùn)營(yíng)
PHP新特性之命名空間、性狀和生成器:雖然專欄叫做前端讀書(shū)筆記,但是我相信你們一定也不會(huì)拒絕全世界最好的語(yǔ)言的~<?phpuse func Namespace/functionName;functionName();
也可以導(dǎo)入常量,use constant Namespace/CONS_NAME;echo CONS_NAME;
函數(shù)和常量的別名與類名的創(chuàng)建方式一樣。<?phpfunction myGenerator() { yield 'value1'; yield 'value2';}
調(diào)用生成器函數(shù)的時(shí)候,PHP會(huì)返回一個(gè)屬于Generator類的對(duì)象,這個(gè)對(duì)象可以使用foreach()函數(shù)迭代,每次迭代,PHP會(huì)要求這個(gè)對(duì)象的實(shí)例計(jì)算并提供下一個(gè)要迭代的值,生成器的優(yōu)雅之處就是在每產(chǎn)出一個(gè)值之后,生成器內(nèi)部狀態(tài)會(huì)一直停頓和恢復(fù)之間切換,直到抵達(dá)定義體的末尾或者遇到空的return;語(yǔ)句為止,例如:<?phpforeach (myGenerator() as $yieldedValue) { echo $yieldedValue, PHP_EOL;}
以上例子會(huì)輸出value1value2
2).生成器是如何節(jié)約內(nèi)存的?生成一個(gè)范圍內(nèi)的數(shù)值(錯(cuò)誤方式)<?phpfunction makeRange($length) { $dataset = []; for ($i=0; $i < $length; $i++) { $dataset[] = $i; } return $dataset;}$customRange = makeRange(1000000);foreach ($customeRange as $i) { echo $i, PHP_EOL;}
預(yù)先創(chuàng)建了一個(gè)包含很大整數(shù)組成的數(shù)組,再看使用生成器的例子。<?phpfunction makeRange($length) { for ($i = 0; $i < $length; $i++) { yield $i; }}foreach(makeRange(1000000) as $i) { echo $i, PHP_EOL;}
在實(shí)際的例如迭代一個(gè)4GB大小的文件中功能中,迭代器大展身手。<?phpfunction getRows($file) { $handle = fopen($file, 'rb'); if ($handle === false) { throw new Exception(); } //feof()函數(shù)檢測(cè)是否到達(dá)文件末尾 while (feof($handle) === false) { //fgetcsv()一次讀取csv文件的一行 yeild fgetcsv($handle); } fclose($handle)}foreach (getRows('data.csv') as $row) { print_r($row);}
關(guān)鍵詞:成器,空間,命名,特性
客戶&案例
營(yíng)銷資訊
關(guān)于我們
客戶&案例
營(yíng)銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。