php基于闭包实现函数的自调用(递归)实例分析


Posted in PHP onNovember 11, 2016

本文实例讲述了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.'<br />';
      //递归调用自己
      $fn($n,$counter,$max);
    }
    return $counter;
  };//记得这里必须加``;``分号,不加分号php会报错,闭包函数
  /*
  *这里函数closure的返回值就是调用闭包的匿名函数
  *而闭包函数,引用closure函数传进来的参数
  */
  return $fn($n,$counter,$max);
}
echo (closure(0,'',10));

这是一个简单的使用php闭包实现递归的函数,其实,假如我们对这个函数稍微修改一下,是可以实现很多功能的,比如说,无限极分类。

关于里面的闭包函数,其实,我们也可以不用引用外面的closure参数,里面的闭包函数的参数,我们可以在closure的内部设置。

我们也可以不用返回闭包函数的值,因为闭包函数是在closure函数里面,我们可以在closure里面设置一下变量传递给闭包函数,然后,用闭包递归获取我们想要的东西存储在数组中,再利用closure函数返回闭包函数获取的东西,所以,闭包函数也可以没有返回值的,关键是你要获取什么东西。

总之,你只要利用这个闭包函数实现你要的东西,然后返回你需要的东西即可,不一定非要从闭包函数的返回值中获取。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
3种平台下安装php4经验点滴
Oct 09 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
网站用php实现paypal整合方法
Nov 28 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
php常用图片处理类
Mar 16 PHP
Symfony2函数用法实例分析
Mar 18 PHP
php的debug相关函数用法示例
Jul 11 PHP
php文件上传、下载和删除示例
Aug 28 PHP
简述php环境搭建与配置
Dec 05 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 #PHP
PHP实现的方程求解示例分析
Nov 11 #PHP
php5.3后静态绑定用法详解
Nov 11 #PHP
php基于curl实现的股票信息查询类实例
Nov 11 #PHP
PHP中STDCLASS用法实例分析
Nov 11 #PHP
php遍历替换目录下文件指定内容的方法
Nov 10 #PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 #PHP
You might like
PHP获取网站域名和地址的代码
2008/08/17 PHP
php强制运行广告的方法
2014/12/01 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
JavaScript 学习笔记(十五)
2010/01/28 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
JavaScript实现区块链
2018/03/14 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python中reload(module)的用法示例详解
2017/09/15 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
python安装scipy的步骤解析
2019/09/28 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
我的理想演讲稿
2014/04/30 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
悬空寺导游词
2015/02/05 职场文书
通讯稿范文
2015/07/22 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
Django基础CBV装饰器和中间件
2022/03/22 Python