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 相关文章推荐
图象函数中的中文显示
Oct 09 PHP
一个简单计数器的源代码
Oct 09 PHP
php foreach、while性能比较
Oct 15 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
php代码审计比较有意思的例子
May 07 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
PHP云打印类完整示例
Oct 15 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
tp5框架无刷新分页实现方法分析
Sep 26 PHP
用php如何解决大文件分片上传问题
Jul 07 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
调频问题解答
2021/03/01 无线电
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
柏林通行证:Berlin Pass
2018/04/11 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
农村婚庆司仪主持词
2014/03/15 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
教师自查自纠材料
2014/10/14 职场文书
2014年法务工作总结
2014/12/11 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
学子宴致辞大全
2015/07/27 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang
MyBatis 动态SQL全面详解
2021/10/05 MySQL