Laravel 服务器容器 服务器提供者 门脸模式

  • 服务器容器
  • 服务器提供者
  • 门脸模式

服务器容器
容器概念 就是装东西的,容器装的是一个一个实例的对象(类),换句话说也是一个服务

往容器放进邮件类,就是一个绑定的过程,在绑定之后我们需要在获取的时候,从容器后去到这个类,这叫做处理或者解析的过程

我们为什么要使用容器,我们使用容器来做什么呢
答: IOC控制反转 面相对向思想,降低代码的耦合度

没有用到IOC控制反转,对象A依赖对象B,对现象A初始化或者运行某一点的时候,必须自己主动去new,创建或者使用已经创建的对象B,不管创建还是使用对象B,控制权都在自己的手上

有个IOC的容器,对象B在初始化,往IOC注入一个标识,字符串B表示对象B,在A想要一定程度的时候,需要对象B的时候,并不是初始化对象B,而是往IOC容器中取出对象B,这样就跟对象A和对象B解耦了,解耦的方式就是用IOC容器的字符串B,比如这个时候对象B换成了对象D,在IOC容器中把字符串B对应的对象B改成对象D,A的程序不需要任何的修改就可以直接使用了 —这就是控制反转的思想

IOC控制反转经常结合依赖注入来做

DI依赖注入 就是将实例当做变量传入到对象当中去,laravel依赖注入是用反射来完成的,比如在用register类的时候,我们在controler函数中,我们并不需要,显示的使用register,我们只需要register作为参数就可以获取register对象了,这个传递过来的对象是依赖容器中注入的是什么

在这里插入图片描述

在这里插入图片描述

laravel的容器在那里呢

在这里插入图片描述

使用类名作为字符串的

这就是容器和绑定的过程
在这里插入图片描述

在这里插入图片描述

这就是解释容器和IOC控制反转
在这里插入图片描述

现在说下 依赖注入

如果在参数中,我们要使用请求( r e q u e s t ) , 我 们 就 可 以 把 这 个 对 象 作 为 参 数 请 求 出 来 就 行 参 数 可 以 有 一 个 或 者 多 个 , 或 者 不 要 , 除 了 request),我们就可以把这个对象作为参数请求出来就行 参数可以有一个或者多个,或者不要,除了 request),request之外我在一个$log(类)

我们只要往函数参数中加入一个类,它自然往这个类里面注入一个实例,这就是依赖注入
在这里插入图片描述

问:绑定是谁来做

答:服务提供注册,一个服务提供者一旦注册了,它就提供一个服务了,这个服务继承了ServiceProvider

两个方法:
register是代表所有的提提供服务者提供服务之前,进行注册的
boot 是在所有服务提供者加载之后进行注册的
他们是顺序的区别
在这里插入图片描述

在这里插入图片描述
我们可在一个请求生命周期开始之前,我们就提供这个服务,就是说把这个服务放在容器中,也可以具体使用到的时候,第一次使用到的时候,我们才对这个服务进行提供

标志代表,你是在什么时间点往容器中增加这个服务

路径: laravel58\config\app.php

一个请求生命周期中,有的在框架写的注册服务提供,还有一个是在配置文件中写的服务提供

三、门脸模式

平时使用的类,需要new,或者从容器中获取,但是门脸模式为容器中可用的类提供一个静态调用的方法,我们可以静态调用容器的对应类,

比如:
在这里插入图片描述

路径: laravel58\config\app.php下的 aliases
在这里插入图片描述

E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Support\Facades\Request.php

门脸类只有一个函数 ,这个函数做了什么事情呢,return了一个字符串,这个字符串是什么?就是我们上面说的容器中类的对应的标签(标识)

class Request extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'request';
    }
}

就是下面的图片
在这里插入图片描述

一、用这个函数可用获取到容器

  public function test() {
        // return '我是认证访问';

        #用这个函数可用获取到容器
        $app = app();
        #从容器中获取日志类  make中的字符串用什么呢,找到日志类在什么地方注册的,注册的字符串是什么就是绑定的过程需要找到的
        $log =$app->make("log");
        dd($log);

       # $log->info("post_index",['data' => 'this is post index']);
    }

在这里插入图片描述

#容器的地址 E:\xampp\htdocs\xampp\laravel58\bootstrap\app.php
绑定的过程就是在容器里面
在这里插入图片描述
E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Foundation\Application.php

日志类
在这里插入图片描述
E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Log\LogServiceProvider.php
在这里插入图片描述

#这个日志服务提供者在register方法里面,使用singleton的方法,来把一个日志类也叫做日志服务,绑定到容器中,绑定的字符串叫做log

在这里插入图片描述

二、我不想从容器中获取 ,我们想直接使用依赖注入

找到这个方法
E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Foundation\Application.php
在这里插入图片描述
上图
Aliases的意思是
服务容器中注册的名字是log,但是我可以使用这三个类,相当于获取的是log服务容器中的类

    public function test(\Psr\Log\LoggerInterface $log) {
        // return '我是认证访问';

        dd($log);

        #我不想从容器中获取 ,我们想直接使用依赖注入

        #用这个函数可用获取到容器
        // $app = app();
        // #从容器中获取日志类  make中的字符串用什么呢,找到日志类在什么地方注册的,注册的字符串是什么就是绑定的过程需要找到
        // $log =$app->make("log");
        // dd($log);

        // $log->info("post_index",['data' => 'this is post index']);
    }

依赖注入成功

在这里插入图片描述

三、用门脸怎么查
在这里插入图片描述

如何查找一个门脸或注入类又哪些函数

最重要的是查找到你在容器中,注册的字符串

你是门脸类你要找字符串怎么找呢
在这里插入图片描述
路径是:E:\xampp\htdocs\xampp\laravel58\vendor\laravel\framework\src\Illuminate\Support\Facades\Log.php

查找门脸类对应的容器的字符串是什么,可以看到这个log对应它在容器中对应的字符串是 return LoggerInterface::class;

Psr\Log\LoggerInterface 对应的是在容器中的实际是log
在这里插入图片描述

#看api文档
https://laravel.com/api/5.4/Illuminate/Log/Writer.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值