• laravel的服务容器,服务提供者,门面的理解


    服务容器, 服务提供者和门面之间都存在着一些因果关系, 单独的去理解某一个, 不太好理解
    个人的理解, 我们新建一个类或一个接口来提供某种服务, 此时有三个对象, 服务(也就是我们新建的类或接口), 服务提供者(也就是 laravel 的 ServiceProvider), 容器(也就是 container app())

    我们通过服务提供者, 把一个服务 注册到 容器中

    容器

    这个不用多说 laravel 的 app就是一个容器,可以使用 app() 来得到这个容器对象

    服务

    我们来新建一个服务,其实就是自已定义的一个类或接口(但一般来说服务应该是一个接口)
    在这里插入图片描述
    我们创建一个 Animal 接口, 并用 Cat 来实现它, 做为一个 服务吧

    <?php
    namespace App\Libs\MyLib;
    
    interface Animal{
    
        public function jump();
    
        public function run();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    <?php
    namespace App\Libs\MyLib;
    
    class Cat implements Animal{
    
        public function jump()
        {
            dd("this is the Cat jump");
        }
    
        public function run()
        {
            dd("this is the Cat run");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    上面有了服务, 这时就要有一个服务提供者(用于把容器和服务绑定(也收注册))

    服务提供者

    laravel 创建一个服务提供者 使用 php artisan make:provider XXXServiceProvider.php
    在这里插入图片描述
    成功之后, 就会在目录中多一个 服务提供者的类
    在这里插入图片描述
    我们在register中把 Cat 绑定到容器
    在这里插入图片描述


    上面, 服务通过服务提供者绑定到了容器中, 我们此时还是不能使用的, 我们还差一步, 要把服务提供者注册到laravel 的配置文件中

    在这里插入图片描述
    通过以上的操作, 我们就把服务和容器绑定了, 并且框架在启动时就会做相应的配置
    那么我们怎么使用我们注册的服务呢?

    在这里插入图片描述
    上面的几种方式, 都是可以从容器中取出服务对象的


    上面的几种方法取出服务的对象 写起来是不是有点太长, 太烦了, 我们有没有一种简单点的方法来取得对象呢, 这时就要说起 门面了
    看一下 vendor/laravel/framework/src/iiiuminate/support/facades 下的文件, 都是门面的文件, 我们可以 模板的写一个自已的 门面类
    在这里插入图片描述

    在这里插入图片描述
    同样我们可以给门面注册一个别名
    在这里插入图片描述
    在这里插入图片描述

    此时我们就可以使用 门面来用静态方法调用的方式来 调用方法了, (注意, 门面只对方法有用, 对属性调用是没有效果的)

  • 相关阅读:
    在 Windows 10/11 上恢复已删除文件的 9 种简单方法
    Vue中mixin的使用
    计算机网络相关知识点总结(一)
    油罐监测系统无线解决方案,真正实现无人值守
    黑马VUE3视频笔记
    计算机毕业设计SSMJava宠物之家【附源码数据库】
    【计网 DNS】计算机网络 DNS协议详解:中科大郑烇老师笔记 (六)
    windows安装MongoDB后进入命令交互界面失败解决方案
    历史高频行情数据存储最佳实践:DolphinDB Array Vector 使用指南
    【Algorithm】GPLT L3-020 至多删三个字符
  • 原文地址:https://blog.csdn.net/hjh15827475896/article/details/125396545