优质广告供应商

广告是为了更好地支持作者创作

深入thinkphp5.1之Container容器

作为tp框架或者说任何一种框架的核心思想,container类基本上算是框架的灵魂所在。

不得不说的注册树

在thinkphp框架中实现容器概念的无非是:注册树模式+单例模式的结合,单例模式咱就不进行细讲了,应该看过单例的代码的人都基本上能很轻松的掌握,这里讲一下注册树模式。

思想:其实注册树和单例模式的思想基本上相同,但是我们单例模式只是针对一个单独的实例进行操作,注册树更像一个盒子,将要用或者正在调用的实例放在盒子中,同一进程中的下一次请求进入,就不用再去实例化,而是直接在盒子里面进行查找返回。

简单的一个例子:通过类的标识获取到类的实例


其实核心思想很简单,只要将代码管理做到规范,面试的时候就可以和面试官将我深入理解面向对象编程。反复琢磨container类中的代码,你会发现真的不是随随便便的代码都能做框架的代码,这里面的思想和代码质量与咱们的业务代码真的不是一个档次,虽然也不能这么来比较,就当调侃一下。

以上代码基本上就是一个最简陋的注册树代码了。

facade门面模式

本来想用一篇单独文章来写tp5中的门面模式,但是感觉凑不到这么多字数,为了文章的质量,还是决定放在这里来写。门面模式:静态调用类中的非静态方法。挺起来是很高大上的,很多一到三年的开发者对这个门面模式都是不知云云的,要比别人更快的成长,咱就得比别人涉猎得更多。

这里我就不写案例了,直接讲解框架案例


此处调用thinkphp中的内置方法

__callstatic:当类中未发现被调用的静态方法将会调用此函数

__call_user_func_array:调用传入实例类中的非静态方法


到这里就是类中的门面模式

Container类的解读

在上面咱们看到了,其实门面模式如果具体划分也可以不属于tp5的门面模式,最下面的衔接语句是:return Container::getInstance()->make($class,$args,$newInstance):此处的make方法实际相当于注册数模式的get和set方法的结合,make就是container类的核心

主要类:__make的解读下面是图解

对应的代码解读



到此基本上类container解读基本完成

优质广告供应商

广告是为了更好地支持作者创作

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 10,458评论 1 32
  • 一. Java基础部分.................................................
    wy_sure阅读 3,235评论 0 11
  • 优质广告供应商

    广告是为了更好地支持作者创作

  • 孤独的鸟巢 文/李银波 屋后杨树上的鸟窝, 树叶落尽的冬天, 孤独地挂在树枝上。 鸟儿们早已倾巢南迁, 唯独它执着...
    木子李000阅读 692评论 2 17
  • 金税盘 1、一般纳税人抄报方法 登录系统抄税-纳税申报-登录系统清卡,这必须有先后顺序,不能抄税后直接清卡,具体方...
    金融牌照_企业注册咨询_白阅读 1,345评论 0 5
  • 滴答着的驴蹄声由远而近,白帽子与红头巾一左一右,颠簸着向前。人也不赶驴,驴也不催人,慢慢悠悠,穿过南疆的风。毛驴和...
    文静的菀儿阅读 162评论 2 1