位置: 编程技术 - 正文

PHP基于Closure类创建匿名函数的方法详解(php类的使用)

编辑:rootadmin

推荐整理分享PHP基于Closure类创建匿名函数的方法详解(php类的使用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php类的使用,php的require,phpils,php cli,php cli,php cli,php类的使用,php类的使用,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了PHP基于Closure类创建匿名函数的方法。分享给大家供大家参考,具体如下:

Closure 类

用于代表匿名函数的类。

匿名函数(在 PHP 5.3 中被引入)会产生这个类型的对象。在过去,这个类被认为是一个实现细节,但现在可以依赖它做一些事情。自 PHP 5.4 起,这个类带有一些方法,允许在匿名函数创建后对其进行更多的控制。

这个类不能实例化,里面主要有两个方法,都用来复制闭包,一个静态一个动态,下面分别详细讲解下这两个不好理解的方法。

Closure::bind

public static Closure Closure::bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )

参数说明:

closure需要绑定的匿名函数。

newthis需要绑定到匿名函数的对象,或者 NULL 创建未绑定的闭包。

newscope想要绑定给闭包的类作用域,或者 'static' 表示不改变。如果传入一个对象,则使用这个对象的类型名。 类作用域用来决定在闭包中 $this 对象的 私有、保护方法 的可见性。

The class scope to which associate the closure is to be associated, or 'static' to keep the current one. If an object is given, the type of the object will be used instead. This determines the visibility of protected and private methods of the bound object.

上面是该方法的定义,第一个参数很好理解,就是一个闭包函数;第二个参数就不太好理解,如果要复制的闭包中包含$this,这个对象就表示这个$this,闭包函数里面对这个对象的修改在调用结束之后也会保持一致,比如修改了一个属性;第三个参数就不太好理解了,看官方的说明也是云里雾里的,默认参数情况下,调用$this->访问object $newthis中的属性函数的时候,会有限制,只能访问public属性的函数,如果想访问protected/private属性,就要设置为对应的类名/类实例,就要像在类里面一样,要访问那个类的保护/私有属性函数。

例子

上面的代码会报错Fatal error: Uncaught Error: Call to protected method T::who() from context 'Closure'。

PHP基于Closure类创建匿名函数的方法详解(php类的使用)

加上bind第三个参数为t::class或者new T(),会正常输出每一个结果。

当然了,闭包也可以传递参数

上面的程序跟匿名函数一样,啥对象也没有依赖,上面的程序会输出:

另外还有个特别要说明的例子

上面的情况会输出什么呢,没错,会报错,提示访问不了私有属性show,这个时候,加上第三个参数就可以了,看了第三个参数不光影响$this的作用域,也可以影响参数的作用域。

Closure::bindTo

bindTo和bind功能类似,这里只是另外一种形式,都是复制当前闭包对象,绑定指定的$this对象和类作用域。,参数比bind少了第一个,后面两个一样,当然还有一个区别就是bindTo不是静态方法,是闭包才会存在的一个属性方法。

例子

上面函数的输出和bind的类似

一个trick

这个函数是在看composer生成的自动加载源码的时候碰到的,在composer中用的比较特别,下面是截取部分composer中的代码

上面的代码比较奇特,在call_user_func中,第一感觉是传错参数了,其实不然,这里调用了一个函数,这个函数会返回一个Closure对象,也就是一个匿名函数,最终传入的参数还是一个callable类型。再看看这个返回的闭包,里面使用了use,这是连接闭包和外部变量的桥梁。

至于这里为什么普通传参数就可以,是因为php5里面,对象形参和实参数指向相同的对象,函数里面对对象的修改会反映到对象外面。

所以,上面这么做是没问题的,还有另外一种形式也可以

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》及《php程序设计算法总结》

希望本文所述对大家PHP程序设计有所帮助。

PHP实现基于回溯法求解迷宫问题的方法详解 本文实例讲述了PHP实现基于回溯法求解迷宫问题的方法。分享给大家供大家参考,具体如下:引言最近在leetcode上看了些算法题,有些看着很简单的很常

PHP实现执行外部程序的方法详解 本文实例讲述了PHP实现执行外部程序的方法。分享给大家供大家参考,具体如下:在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用shell命令

PHP编程之微信公众平台企业号验证接口示例【回调操作】 本文实例讲述了PHP微信公众平台企业号验证接口。分享给大家供大家参考,具体如下:微信公众平台企业号验证接口、回调PHP版,本人为了解决这个企

标签: php类的使用

本文链接地址:https://www.jiuchutong.com/biancheng/287510.html 转载请保留说明!

上一篇:PHP实现的堆排序算法详解(php 堆排序)

下一篇:PHP实现基于回溯法求解迷宫问题的方法详解(php返回对象)

  • 待抵扣进项税额和待认证进项税额的区别
  • 账面价值大于计税基础
  • 小规模纳税人企业所得税多少
  • 哪些产品享受教育优惠
  • 收到增值税发票是不是就给钱了
  • 计提附加税税会计分录
  • 纳税人识别号怎么看是不是一般纳税人
  • 会计凭证的数字书写示例图
  • 企业筹建期间契税账务处理
  • 平台收取的佣金开具什么发票
  • 行政职工福利费包括哪些内容呢
  • 个体户银行开户是开公户还是私户
  • 增值税纳税申报表怎么填
  • 增值税期初应补税额计算
  • 对外投资属于资产类账户吗
  • 预缴增值税 已交税金
  • 顾客让抹零头应对话术
  • 核定征收的企业需要成本发票吗
  • 企业哪些可以抵扣增值税
  • 在外省预交企业所得税
  • 国税代开增值税专票开错了如何处理?
  • 自收自支事业单位
  • 企业职工教育经费
  • 归属于母公司的净利润怎么来的?
  • 售后需要品控吗
  • 小规模发工资超了怎么办
  • 息税前利润变化率计算
  • 在建工程变更建设单位
  • 电脑重装系统如何分区?
  • 手工明细分类账本怎么记
  • 商贸企业销售
  • 累计计税折旧如何调整
  • 入库材料未付款属于什么会计科目
  • 应交增值税专栏下的增值税项目有哪些?
  • 海关专用缴款书认证的步骤和说明
  • 外贸企业申报出口退税的期限
  • 企业政策性拆迁资产重置算支出吗
  • php获取网页源代码
  • 通信原理简明
  • 手把手教你安装技嘉b550 master主板
  • 新手入门指南
  • 被收购方和被收购企业
  • 未抵扣的进项发票,开出红字信息表,需要做进项税转出吗
  • 成本费用利润率越高越好吗
  • sql server安装出现值不能为null
  • 汇总记账凭证账务处理
  • 租赁厂房对方不租怎么办
  • 销售赠品的会计分录
  • 小规模纳税人进项票可以抵扣吗
  • 融资方式股权融资
  • 待摊费用取消了怎么做账
  • 企业为职工购买互助保障项目经费可以有什么开支
  • 企业的管理费用包括
  • MySQL 5.6 中 TIMESTAMP有那些变化
  • sql中查询语句
  • sedsvc.exe是什么
  • Win10 Build 10565 Edge浏览器更新日志和已知问题
  • 系统维护的主要内容有哪些
  • bios密码忘记了要怎么重置
  • windows模拟
  • ubuntu14升级
  • win7系统怎么访问共享文件
  • win10预览版桌面图标和任务栏不翼而飞怎么办?
  • win10如何使用usb无线网卡
  • Extjs中使用extend(js继承) 的代码
  • android adapter
  • linux怎么使用shell
  • cocos2dx quick lua 学习笔记1
  • dos批处理实例800例
  • android 属性动画改变view大小
  • node.js的理解
  • android入门视频教程
  • JavaScript性能优化
  • 安卓activity类
  • 京东发票税号是几位数
  • 超豪华小汽车需要在什么环节纳税
  • 国家税务总局发票下载
  • 个人转让住宅需要缴纳什么税
  • 资源税谁缴纳
  • 增值税发票报税流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设