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 相关文章推荐
web方式ftp
Oct 09 PHP
PHP通用检测函数集合
Nov 25 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP 微信扫码支付源代码(推荐)
Nov 03 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
js获取域名的方法
2015/01/27 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
Vue实现图书管理案例
2021/01/20 Vue.js
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
记录Django开发心得
2014/07/16 Python
Python中运行并行任务技巧
2015/02/26 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
Python Pillow Image Invert
2019/01/22 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
解决c++调用python中文乱码问题
2020/07/29 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
介绍一下grep命令的使用
2012/06/28 面试题
工作人员思想汇报
2014/01/09 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
欧元符号 €
2022/02/17 杂记
一文简单了解MySQL前缀索引
2022/04/03 MySQL
JS实现简单九宫格抽奖
2022/06/28 Javascript