视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ThinkPHP容器之绑定参数
2020-11-02 18:02:21 责编:小采
文档


本文主要是学习每个方法中__make这个方法是怎么执行的,还有既然学习了容器我们如何使用容器来调用配置来获取配置信息。

解析bindParams方法

接下来就解析一下bindParams这个方法。

关于参数传递的就是一个反射类 第二个参数暂时不做说明,目前还没有遇到响应的场景。

第一个参数值$reflect

使用反射方法$reflect->getNumberOfParameters()获取反射类中对应的方法中的参数数目。按照上文的就是__make方法。容器代码中只获取过俩个方法的参数数目,一个是__make方法,一个是就是反射类中的构造函数。

由于目前还没有传递vars变量的场景,所以这块的内容暂时不去研究它直接略过。

代码$params = $reflect->getParameters();也是使用反射获取方法的参数。

打印出来可以看到的结果是俩组数据。

那么这这组数据是从哪里来的呢!往上翻一下,看一下$reflect这个参数是什么就明白了。

thinkApp这个反射类是没有__make方法的,所以会获取构造函数中的参数。

然后thinkLog反射类中存在__make方法,于是就会返回__make的参数,如下图。

就像类似于thinkLog这样的类,既有__make方法,也存在构造函数,就会走俩次bindParams方法,这个应该都明白,正是下图逻辑。

在接下来就是循环反射类中获取的参数。

获取参数名、和获取对应的反射类

最后将获取出来的反射类传递给getObjectParam方法。

在这个getObjectParam方法中并没有多少内容。

由于$vars从头到尾都是空数组所以去除数组第一个的操作和判断是否为闭包都不会执行。

最终会在返回去执行make方法

然后make方法会直接从容器中返回这个实例

当一个反射类存在__make方法时,最终就会执行return $method->invokeArgs(null, $args);,带参数执行反射类方法

使用容器来调用配置类

既然已经把容器源码读了一次了,可不可以使用容器来实现呢!

那当然是可以的了,这里需要注意一下咔咔的命名空间,这里由于为了以后回顾方便把类名也起成了Container了,所以给加了一个别名,你们在使用的时候是不需要的哈!

截止到这里容器的源码就讲解的差不多了,后边咔咔会做一个完整的流程图,提供改大家查看。

坚持学习、坚持写博、坚持分享是咔咔从业以来一直所秉持的信念。希望在偌大互联网中咔咔的文章能带给你一丝丝帮助。我是咔咔,下期见。

下载本文
显示全文
专题