php基于閉包實(shí)現(xiàn)函數(shù)的自調(diào)用(遞歸)實(shí)例分析
本文實(shí)例講述了php基于閉包實(shí)現(xiàn)函數(shù)的自調(diào)用(遞歸)的方法。分享給大家供大家參考,具體如下:
php的閉包可能不常用,但是在某些場(chǎng)合之下還是可以考慮用php的閉包來(lái)實(shí)現(xiàn)某些功能的,比如遞歸,這里講一下用php的閉包實(shí)現(xiàn)遞歸
//php閉包實(shí)現(xiàn)函數(shù)的自調(diào)用,也就是實(shí)現(xiàn)遞歸 function closure($n,$counter,$max){ //匿名函數(shù),這里函數(shù)的參數(shù)加&符號(hào)是,引址調(diào)用參數(shù)自己 $fn = function (&$n,&$counter,&$max=1) use(&$fn){//use參數(shù)傳遞的是函數(shù)閉包函數(shù)自身 $n++; if($n < $max){//遞歸點(diǎn),也就是遞歸的條件 $counter .=$n.'<br />'; //遞歸調(diào)用自己 $fn($n,$counter,$max); } return $counter; };//記得這里必須加``;``分號(hào),不加分號(hào)php會(huì)報(bào)錯(cuò),閉包函數(shù) /* *這里函數(shù)closure的返回值就是調(diào)用閉包的匿名函數(shù) *而閉包函數(shù),引用closure函數(shù)傳進(jìn)來(lái)的參數(shù) */ return $fn($n,$counter,$max); } echo (closure(0,'',10));
這是一個(gè)簡(jiǎn)單的使用php閉包實(shí)現(xiàn)遞歸的函數(shù),其實(shí),假如我們對(duì)這個(gè)函數(shù)稍微修改一下,是可以實(shí)現(xiàn)很多功能的,比如說(shuō),無(wú)限極分類。
關(guān)于里面的閉包函數(shù),其實(shí),我們也可以不用引用外面的closure參數(shù),里面的閉包函數(shù)的參數(shù),我們可以在closure的內(nèi)部設(shè)置。
我們也可以不用返回閉包函數(shù)的值,因?yàn)殚]包函數(shù)是在closure函數(shù)里面,我們可以在closure里面設(shè)置一下變量傳遞給閉包函數(shù),然后,用閉包遞歸獲取我們想要的東西存儲(chǔ)在數(shù)組中,再利用closure函數(shù)返回閉包函數(shù)獲取的東西,所以,閉包函數(shù)也可以沒(méi)有返回值的,關(guān)鍵是你要獲取什么東西。
總之,你只要利用這個(gè)閉包函數(shù)實(shí)現(xiàn)你要的東西,然后返回你需要的東西即可,不一定非要從閉包函數(shù)的返回值中獲取。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php查找技巧與方法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php加密方法總結(jié)》、《PHP編碼與轉(zhuǎn)碼操作技巧匯總》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php正則表達(dá)式用法總結(jié)》、及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP實(shí)現(xiàn)十進(jìn)制數(shù)字與二十六進(jìn)制字母串相互轉(zhuǎn)換操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)十進(jìn)制數(shù)字與二十六進(jìn)制字母串相互轉(zhuǎn)換操作,涉及php字符串遍歷、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-08-08基于PHP+Ajax實(shí)現(xiàn)表單驗(yàn)證的詳解
本篇文章是對(duì)PHP+Ajax實(shí)現(xiàn)表單驗(yàn)證的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP7擴(kuò)展開(kāi)發(fā)教程之Hello World實(shí)現(xiàn)方法示例
這篇文章主要介紹了PHP7擴(kuò)展開(kāi)發(fā)教程之Hello World實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了針對(duì)php7擴(kuò)展的源碼下載、設(shè)置、代碼編輯及測(cè)試運(yùn)行相關(guān)操作技巧,需要的朋友可以參考下2017-08-08ThinkPHP連接Oracle數(shù)據(jù)庫(kù)
本文給大家介紹的是如何使用thinkphp連接Oracle數(shù)據(jù)庫(kù)的方法和詳細(xì)步奏,并附上實(shí)例,非常的實(shí)用,有需要的小伙伴可以參考下2016-04-04ThinkPHP自動(dòng)驗(yàn)證失敗的解決方法
引用ThinkPHP2.0開(kāi)發(fā)手冊(cè):ThinkPHP手冊(cè)類型檢查只是針對(duì)數(shù)據(jù)庫(kù)級(jí)別的驗(yàn)證,所以系統(tǒng)還內(nèi)置了數(shù)據(jù)對(duì)象的自動(dòng)驗(yàn)證功能來(lái)完成模型的業(yè)務(wù)規(guī)則驗(yàn)證,而大多數(shù)情況下面,數(shù)據(jù)對(duì)象是由表單提交的$_POST數(shù)據(jù)創(chuàng)建。2011-06-06解析關(guān)于wamp啟動(dòng)是80端口被占用的問(wèn)題
本篇文章是對(duì)關(guān)于wamp啟動(dòng)是80端口被占用的問(wèn)題(win7系統(tǒng)下WAMP 80端口被Microsoft-HTTPAPI/2.0占用的解決辦法)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php文章內(nèi)容分頁(yè)并生成相應(yīng)的htm靜態(tài)頁(yè)面代碼
php 文章內(nèi)容分頁(yè)并生成對(duì)應(yīng)的htm靜態(tài)文件實(shí)例代碼,一般主要用戶長(zhǎng)文件分頁(yè)。2010-06-06PHP 動(dòng)態(tài)隨機(jī)生成驗(yàn)證碼類代碼
這個(gè)利用PHP動(dòng)態(tài)隨機(jī)生成驗(yàn)證碼的類是在LAMP的書(shū)上看到的。感覺(jué)寫(xiě)的很好就收藏了下來(lái)。2010-04-04