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 相关文章推荐
linux下 C语言对 php 扩展
Dec 14 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
Apache服务器无法使用的解决方法
May 08 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
PHP中explode函数和split函数的区别小结
Aug 24 PHP
PHP实现文件上传功能实例代码
May 18 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
PHP操作XML中XPath的应用示例
Jul 04 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
Dom 是什么的详细说明
2010/10/25 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
Linux的主要特性
2016/09/03 面试题
优秀研究生自我鉴定
2013/12/04 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
黄河象教学反思
2014/02/10 职场文书
2014年团总支工作总结
2014/11/21 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers