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 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
php读取msn上的用户信息类
Dec 05 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
yii用户注册表单验证实例
Dec 26 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 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(6) 面向对象
2010/02/16 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
php接口技术实例详解
2016/12/07 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
Python实现对字符串的加密解密方法示例
2017/04/29 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
Python 文件数据读写的具体实现
2020/01/24 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
德国拖鞋网站:German Slippers
2019/11/08 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
工作表扬信的范文
2014/01/10 职场文书
售后客服工作职责
2014/06/16 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
2014年工人工作总结
2014/11/25 职场文书
机器人总动员观后感
2015/06/09 职场文书
教师网络培训心得体会
2016/01/09 职场文书
JavaScript获取URL参数的方法分享
2022/04/07 Javascript