发布网友 发布时间:2022-04-23 17:28
共2个回答
懂视网 时间:2022-04-06 05:00
在上文中对make方法执行后返回实例进行了解析,本文将会对invokeClass方法详细解析。
”invokeClass方法详细解析(反射的使用)
不管是阅读完上边的代码流程,还是上图的流程图,肯定都知道了最终代码会走向一个方法invokeClass
,就是这个方法。
这个方法中全部都是利用反射的知识点,不会的在去看上文或者之前的文章吧!
在invokeClass
方法中,最重要的就是绑定参数的这个方法bindParams
,这个方法里边也全部运用的是反射。
所以在容器中反射起到的作用有多大就不用在去做过多的说明了。
在这之前需要把这块说明一下,看到这个__make方法,咔咔是记忆尤深哈!
这个方法在之前学习config源码配置那一篇文章中咔咔说暂时略过,因为当时所储备的知识点和框架代码执行流程还没到说明__make这个方法的阶段。
为了就是在容器这里详细的说明__make这个方法的作用。
当你打印reflect这个变量的值时会返回俩个反射类的对象,如下图。
代码$reflect->hasMethod('__make')
就是判断此反射类里边是否存在__make函数
代码$method = new ReflectionMethod($class, '__make');
就是执行反射类的一个方法 这里就指的是__make方法
当断点这个method就会返回俩个存在__make反射类,这里是因为断点了只有显示了俩个反射类。
这里主要谈论thinkConfig.
最后一行代码$method->isPublic() && $method->isStatic()
就是判断方法是不是公公共的 判断方法是不是静态的
直到运行到$args = $this->bindParams($method, $vars);
这行才会进入到bindParams
方法,这个方法也会在下文给出详细的解析。
到这里invokeClass方法详细解析就结束了,主要就是运用的反射机制的实现一系列功能,利用反射进行依赖注入,执行类中的__make方法
“坚持学习、坚持写博、坚持分享是咔咔从业以来一直所秉持的信念。希望在偌大互联网中咔咔的文章能带给你一丝丝帮助。我是咔咔,下期见。
”热心网友 时间:2022-04-06 02:08
1、Laravel,laravel这个框架很有意思,定时任务,数据迁移,大概你能在web中想到的功能这个框架都可以提供,它的路由借鉴了Ruby on Rails 和Python的flask框架,但是还提供了web方面其它的一些功能,你可以把它想象成PHP中像Java一样强大的Web中的瑞士军刀,前提是你不考虑性能,因为它的实现使用了大量的闭包和反射,大概在PHP里严格引入设计模式的也只有这个了。