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函数解决SQL injection
Dec 09 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
使用URL传输SESSION信息
Jul 14 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
PHP时间类完整实例(非常实用)
Dec 25 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
php实现留言板功能
Mar 05 PHP
PHP自动识别当前使用移动终端
May 21 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
DOM精简教程
2006/10/03 Javascript
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang