为了账号安全,请及时绑定邮箱和手机立即绑定

可变函数!为什么不可以?类属性要怎么实现。

可变函数!为什么不可以?类属性要怎么实现。

PHP
下雨天2015 2017-03-29 10:41:36
查看完整描述

1 回答

?
pardon110

TA贡献1038条经验 获得超227个赞

$d是一个匿名函数作为变量的值,$d()为执行匿名函数,得到外部类Bim实例,

$d()->doSomething(),执行Bim实例的doSomething方法,所以可行。

$c是Container的实例

$c->bim 实例属性指向的是一个匿名函数形成的闭包(匿名函数目前是通过Closure 类来实现的),PHP 会自动把此种表达式转换成内置类 Closure 的对象实例,很显然Closue类(php内置类)是没有doSomething方法

$c->bim()  很显然执行类container的bim方法,显然该类没有此方法,所以$c->bim()->doSomething()不可行,因为他走到$c->bim()就报致命错了。



查看完整回答
反对 回复 2017-04-07
  • pardon110
    pardon110
    其实后者之所以不行,在于php对$c->bim()的解析,php不会先解析$c->bim属性得到匿名函数, 它会直接进入$c->bim(),认为在调用实例$c的bim方法
  • 1 回答
  • 4 关注
  • 1165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信