php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归
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.'
';
//遞歸調(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ú)限極分類(lèi)。
關(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ù)的返回值中獲取。
總結(jié)
以上是生活随笔為你收集整理的php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php object添加到数组,PHP
- 下一篇: php显示网卡信息,netwox显示网络