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 相关文章推荐
一个很不错的PHP翻页类
Jun 01 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
PHP排序算法的复习和总结
Feb 15 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
php自定义的格式化时间示例代码
Dec 05 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
PHP递归统计系统中代码行数
Sep 19 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
PHP 处理图片的类实现代码
2009/10/23 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
DOM 中的事件处理介绍
2012/01/18 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
javascript+Canvas实现画板功能
2020/06/23 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
康拓普公司Java笔面试
2016/09/23 面试题
过滤器的用法
2013/10/08 面试题
党员志愿者活动方案
2014/08/28 职场文书
学校德育工作总结2015
2015/05/11 职场文书
交通事故责任认定书
2015/08/06 职场文书
护士心得体会范文
2016/01/25 职场文书
mysql部分操作
2021/04/05 MySQL
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang