容器门面依赖注入初步认识

102阅读-0评论-作者:码农 PHP 容器 门面 依赖注入 单例模式 工厂模式
新手学习框架,就会接触到一些设计模式,这里我们简单说一下容器和门面。

容器

    通常情况下,我们在A类中使用另外一个B类,需要引入B类,然后实例化B类,这样做容易理解,但是耦合度太高,如果B类构造函数做了修改,在A类中也要做相应的修改,并且使用A类的人需要很熟悉B类才行,我们把这个叫做第一重境界,稍后上代码;现在再说第二重境界,我们直接实例化B类,把实例化的B类当做参数传递给A,也就是简单的依赖注入,虽然这些写法修改了B类,代码量修改没多少,但是跟第一重境界一样,每次我们要使用A类都必须要先实例化B类,这对于负责编写A类的人来说,跟第一重境界一样需要熟悉B类;然后是第三重境界,IOC容器,我们把B类注册到容器中,编写A的程序员,只需要从容器中取出B类即可,说的有点模糊,直接上代码。


第一重境界:代码如下

blob.png

第一重境界就是A类需要使用B类的时候引入B类,然后实例化,因为我们A、B俩个类在一个文件里面,就不用引入了,执行A类的test方法,成功打印B类对象。


第二重境界:代码如下

blob.png

第二重境界就是A类使用B类的时候,把B类实例化当做一个参数传入A类里面,这个过程一般是在A类的构造方法里面实现,这里我们直接传入A类实现,效果是一样的,构造方法实现可以让代码量减少,为了方便大家理解,我就不使用构造方法了。最后我们执行A类的test方法,也是成功打印出B类对象。


第三重境界:代码如下

blob.png

blob.png

使用第三种境界,各个负责人只需要将自己编写的类注册到容器中,其它人就可以直接使用了,完全不需要知道这些类是如何实现的,低耦合,开发方便,当然,我们实现的这个容器还是太简洁了,大家只需要知道容器其实就是一个存放类的东西,多个人开发的类都放到容器中,无论谁使用直接拿出来用即可,我们这里就不写检测、移除等功能了。我们用通俗的话来说容器,比如一个寝室4个人,有一个钱罐(相当于容器),每个人有钱了就把钱放到钱罐里面(想当于注册类到容器),当有人需要钱的时候就去钱罐拿就行,如果不放到钱罐里面就需要你向其他人借,向其他人借的前提就是你得知道他有没有钱(相当于你要熟悉别人编写的类)。

    到这里相信大家对容器有一定的了解了。


门面:

    我们在PHP框架中使用的门面概念,其实就是用静态的方式访问非静态方法,正常情况下我们使用类的方法,需要先实例化类,然后调用类,静态调用的话直接类名加上方法即可,说白了就是减少了代码量。下面我们用代码来说明。

blob.png

看到门面的实现过程,相信大家对PHP的门面有一点了解了。


    我们来对比一下类的本来用法、门面和助手函数

blob.png


QQ:1007027975

0.059259s