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 相关文章推荐
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
PHP常用编译参数中文说明
Sep 27 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
php中fsockopen用法实例
Jan 05 PHP
如何使用php实现评委评分器
Jul 31 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 PHP
PHP实现对数字分隔加千分号的方法
Mar 18 PHP
Yii框架的路由配置方法分析
Sep 09 PHP
Laravel框架集合用法实例浅析
May 14 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读注册表
2006/10/09 PHP
php PDO中文乱码解决办法
2009/07/20 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
浅析PHP开发规范
2018/02/05 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
通过修改referer下载文件的方法
2008/05/11 Javascript
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
用于业余项目的8个优秀Python库
2018/09/21 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python实现小世界网络生成
2019/11/21 Python
opencv python图像梯度实例详解
2020/02/04 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
付款委托书范本
2014/10/05 职场文书
孙振耀退休感言
2015/08/01 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书