PHP中Closure类的使用方法及详解


Posted in PHP onOctober 09, 2015

Closure,匿名函数,又称为Anonymous functions,是php5.3的时候引入的。匿名函数就是没有定义名字的函数。这点牢牢记住就能理解匿名函数的定义了。

Closure 类(PHP 5 >= 5.3.0)简介 用于代表 匿名函数 的类. 匿名函数(在 PHP 5.3 中被引入)会产生这个类型的对象,下面我们来看一下PHP Closure类的使用方法及介绍。

PHP Closure类之前在PHP预定义接口中介绍过,但它可不是interface哦,它是一个内部的final类。Closure类是用来表示匿名函数的,所有的匿名函数都是Closure类的实例。

$func = function() {
  echo 'func called';
};
var_dump($func); //class Closure#1 (0) { }
$reflect =new ReflectionClass('Closure');
var_dump(
  $reflect->isInterface(), //false
  $reflect->isFinal(), //true
  $reflect->isInternal() //true
);

Closure类结构如下:

Closure::__construct — 用于禁止实例化的构造函数
Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。
Closure::bindTo — 复制当前闭包对象,绑定指定的$this对象和类作用域。

看一个绑定$this对象和作用域的例子:

class Lang
{
  private $name = 'php';
}
$closure = function () {
  return $this->name;
};
$bind_closure = Closure::bind($closure, new Lang(), 'Lang');
echo $bind_closure(); //php

另外,PHP使用魔术方法__invoke()可以使类变成闭包:

class Invoker {
  public function __invoke() {return __METHOD__;}
}
$obj = new Invoker;
echo $obj(); //Invoker::__invoke

以上内容就是小编给大家分享的PHP中Closure类的使用方法及详解,希望大家喜欢。

PHP 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 PHP
设定php简写功能的方法
Nov 28 PHP
解决PhpStorm64不能启动的问题
Jun 20 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 PHP
PHP使用非对称加密算法RSA
Apr 21 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 #PHP
PHP程序员不应该忽略的3点
Oct 09 #PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
Oct 09 #PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 #PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 #PHP
PHP抽奖算法程序代码分享
Oct 08 #PHP
php视频拍照上传头像功能实现代码分享
Oct 08 #PHP
You might like
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP原理之异常机制深入分析
2010/08/08 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
js实现简单点赞操作
2020/03/17 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python实现自动装机功能案例分析
2020/10/22 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
生物科学系大学生的自我评价
2013/12/20 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
安全标准化实施方案
2014/02/20 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
朋友聚会开场白
2015/06/01 职场文书