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脚本
Nov 26 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
PHP5函数小全(分享)
Jun 06 PHP
php不写闭合标签的好处
Mar 04 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
php中字符串和正则表达式详解
Oct 23 PHP
PHP实现远程下载文件到本地
May 17 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 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存储过程调用实例代码
2013/02/03 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
python format 格式化输出方法
2018/07/16 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
python实现多线程端口扫描
2019/08/31 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
Python常用编译器原理及特点解析
2020/03/23 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
副总经理工作职责
2013/11/28 职场文书
公司清洁工岗位职责
2013/12/14 职场文书
意向协议书
2015/01/27 职场文书
负责培养人意见
2015/06/05 职场文书
春风化雨观后感
2015/06/11 职场文书
《假如》教学反思
2016/02/17 职场文书
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python