当前位置: 首页 > 后端技术 > PHP

PHP的生成器(generator)

时间:2023-03-29 20:39:37 PHP

鍓嶆部浠婂ぉ鎴戜滑灏辨潵鐪嬬湅PHP5.5.0寮曞叆鐨勭敓鎴愬櫒锛坓enerator锛夈€傛垜浠粡甯稿拷鐣ヨ繖涓姛鑳斤紝浣嗗畠鍏跺疄鏄竴涓潪甯告湁鐢ㄧ殑鍔熻兘銆傚垱寤虹敓鎴愬櫒鐢熸垚鍣ㄧ殑鍒涘缓浠呬粎鏄洜涓虹敓鎴愬櫒鏄湪鍑芥暟涓娇鐢▂ield鍏抽敭瀛椾竴娆℃垨澶氭鐨凱HP鍑芥暟銆備笌鏅€氱殑PHP鍑芥暟涓嶅悓锛岀敓鎴愬櫒浠庝笉杩斿洖鍊硷紝瀹冧滑鍙骇鐢熷€笺€?/涓€涓畝鍗曠殑鐢熸垚鍣ㄥ嚱鏁癿yGenerator(){yield'value1';浜х敓鈥滀环鍊?鈥濓紱yield'value3';}浠ヤ笂鏄竴涓畝鍗曠殑鐢熸垚鍣紝褰撹皟鐢ㄧ敓鎴愬櫒鍑芥暟鏃讹紝PHP浼氳繑鍥炰竴涓狦enerator绫诲璞°€傚彲浠ヤ娇鐢╢oreach()鍑芥暟杩唬姝ゅ璞°€傛瘡娆¤凯浠o紝PHP閮戒細瑕佹眰Generator瀹炰緥璁$畻骞舵彁渚涗笅涓€涓杩唬鐨勫€笺€?/浣跨敤foreach()杩唬foreach(myGenerator()as$yieldValue){echo$yieldValue,PHP_EOL;}//濡備笂杈撳嚭value1value2value3锛氭瘡娆′骇鐢熶竴涓€煎悗锛実enerator鍐呴儴鐘舵€佷細鏆傚仠锛涘綋鐢熸垚鍣ㄨ姹備笅涓€涓€兼椂锛屽啀娆℃仮澶嶅唴閮ㄧ姸鎬併€傜敓鎴愬櫒鐨勫唴閮ㄧ姸鎬佷細鍦ㄦ殏鍋滃拰鎭㈠涔嬮棿鍒囨崲锛岀洿鍒板埌杈惧嚱鏁板畾涔変綋鐨勬湯灏炬垨绌鸿繑鍥烇紱閬囧埌璇彞銆備娇鐢ㄧ敓鎴愬櫒璁╂垜浠娇鐢ㄤ竴涓畝鍗曠殑鍑芥暟鏉ョ敓鎴愪竴涓寖鍥村唴鐨勫€兼潵璇存槑PHP鐢熸垚鍣ㄥ浣曡妭鐪佸唴瀛樸€??phpfunctionmakeRangeYield($length){//$dataset=[];瀵逛簬($i=0;$i<$length;$i++){yield$i;//$鏁版嵁闆哰]=$i;}//return$dataset;}//浣跨敤鐢熸垚鍣?startMemory=memory_get_usage();$t1=寰椂闂达紙鐪燂級锛?customRangeYield=makeRangeYield(1000000);//缁撴潫$t2=microtime(true);$endMemory=memory_get_usage();foreach($customRangeYieldas$i){echo$i.PHP_EOL;}//杈撳嚭echosprintf("鍐呭瓨浣跨敤锛?fkb\n",($endMemory-$startMemory)/1024);echosprintf("鑰楁椂锛?f绉抃n",round($t2-$t1,3));鎴戜滑鏉ュ仛涓姣旓紝鍙互鍦╩akeRangeYield()鍑芥暟涓墦寮€娉ㄩ噴锛屽拰涓嶆墦寮€瀵规瘮//浣跨敤yield鎯呭喌涓嬬殑鍐呭瓨鍗犵敤锛?.562500kb鑰楁椂锛?.000000绉?/鍐呭瓨鍗犵敤鎯呭喌涓嶄娇鐢▂ield:32772.078125kb鑰楁椂:0.205000绉掑洜涓簃akeRangeYield()鍑芥暟闇€瑕佸垎閰嶉鍏堝垱寤虹殑涓€鐧句竾涓暣鏁版暟缁勫唴瀛樸€侾HP鐢熸垚鍣ㄥ仛鍚屾牱鐨勪簨鎯咃紝浣嗕竴娆″彧涓轰竴涓暣鏁板垎閰嶅唴瀛樸€傚疄鎴樺彂鐢垫満杩欎箞鍘夊锛屾棩甯稿伐浣滅敤鍦ㄤ粈涔堝湴鏂癸紵鎴戜滑鏉ョ湅涓€涓鍙栧ぇ鏂囦欢鐨勪緥瀛??phpheader("content-type:text/html;charset=utf-8");functionreadTxt(){#code...$handle=fopen("./test.txt",'rb');while(feof($handle)===false){#浠g爜...yieldfgets($handle);}fclose($handle);}foreach(readTxt()as$key=>$value){#code...echo$value.PHP_EOL;}鍋囪鎴戜滑鐨則est.txt鏂囦欢鏈?G锛屾垜浠暍鐩存帴璇诲叆鍐呭瓨鍚楋紵杩欒偗瀹氭槸涓嶅悎閫傜殑锛屾垜浠簲璇ヤ娇鐢ㄧ敓鎴愬櫒涓€娆″彧涓簍est.txt鏂囦欢涓殑涓€琛屽垎閰嶅唴瀛橈紝鑰屼笉鏄皢鏁翠釜4G鏂囦欢璇诲叆鍐呭瓨銆傛劅璋㈤槄璇绘湰鏂囷紝濡傛湁涓嶅Ε涔嬪锛岃鎸囧嚭锛岃阿璋煓?/p>