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中for循环语句的几种变型
Nov 26 PHP
php模板之Phpbean的目录结构
Jan 10 PHP
PHP array_push 数组函数
Dec 26 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP7如何开启Opcode打造强悍性能详解
May 11 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
php实现的表单验证类完整示例
Aug 13 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
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
护士长竞聘书
2014/03/31 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
在职员工证明书
2014/09/19 职场文书
营销计划书
2015/01/17 职场文书
大学毕业生自我评价
2015/03/02 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python
pycharm无法安装cv2模块问题
2022/05/20 Python