首頁 >後端開發 >php教程 >php基於閉包實作函數的自呼叫(遞歸)實例分析

php基於閉包實作函數的自呼叫(遞歸)實例分析

黄舟
黄舟原創
2017-02-24 09:21:461506瀏覽

本文實例講述了php基於閉包實作函數的自呼叫(遞歸)的方法。分享給大家供大家參考,具體如下:

php的閉包可能不常用,但是在某些場合之下還是可以考慮用php的閉包來實現某些功能的,比如遞歸,這裡講一下用php的閉包實作遞歸

//php闭包实现函数的自调用,也就是实现递归
function closure($n,$counter,$max){
  //匿名函数,这里函数的参数加&符号是,引址调用参数自己
  $fn = function (&$n,&$counter,&$max=1) use(&$fn){//use参数传递的是函数闭包函数自身
    $n++;
    if($n < $max){//递归点,也就是递归的条件
      $counter .=$n.&#39;<br />&#39;;
      //递归调用自己
      $fn($n,$counter,$max);
    }
    return $counter;
  };//记得这里必须加``;``分号,不加分号php会报错,闭包函数
  /*
  *这里函数closure的返回值就是调用闭包的匿名函数
  *而闭包函数,引用closure函数传进来的参数
  */
  return $fn($n,$counter,$max);
}
echo (closure(0,&#39;&#39;,10));



#這是一個簡單的使用php閉包實作遞歸的函數,其實,假如我們對這個函數稍微修改一下,是可以實現很多功能的,比如說,無限極分類。

關於裡面的閉包函數,其實,我們也可以不用引用外面的closure參數,裡面的閉包函數的參數,我們可以在closure的內部設定。

我們也可以不用回傳閉包函數的值,因為閉包函數是在closure函數裡面,我們可以在closure裡面設定變數傳遞給閉包函數,然後,用閉包遞迴取得我們想要的東西儲存在陣列中,再利用closure函數傳回閉包函數取得的東西,所以,閉包函數也可以沒有回傳值的,關鍵是你要取得什麼東西。

總之,你只要利用這個閉包函數實作你要的東西,然後傳回你需要的東西即可,不一定要從閉包函數的回傳值中取得。


 以上就是php基於閉包實作函數的自呼叫(遞迴)實例分析 的內容,更多相關內容請關注PHP中文網(www.php.cn) !

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn