laravel(源码笔记)Facades的调用过程

外观模式(Facade)

  1. 目的:使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口
  2. 缺点
    1. 不能限制子系统类的使用,限制子系统会减少可变性和灵活性。
    2. 新增子系统需要修改外观类的源代码,违背开闭原则
  3. 一个系统可以有多个外观类
  4. 不要通过外观类为子系统添加新行为
  5. 抽象外观类的引入,解决开闭原则
    1. 对于新的业务需求,不修改原有外观类,而对应增加一个新的具体外观类,由新的具体外观类来关联新的子系统对象,同时通过修改配置文件来达到不修改源代码并更换外观类的目的。

Facades

  1. bootstrap
  2. AliasLoader 获取 config/app.php $aliases && 包里面的类别名 来注册别名
    1. getInstance
      1. 没有实例,实例化静态实例返回
      2. 有实例,合并别名,设置别名,返回实例
    2. register
      1. prependToLoaderStack 未注册,加入自动加载函数队列中,头部入。
      2. 注册,标记已注册。
  3. 解析Facade代理的服务(假设调用router)
    1. 调用不存在的静态方法,会触发php的__callStatic静态方法
      1. 获取根对象 getFacadeRoot Route::getFacadeAccessor return ‘router’;
        1. 解析服务 resolveFacadeInstance static:: a p p [ app[ app[name];
        2. RoutingServiceProvider 注册的时候已经设置了单例,并绑定到’router’。这样1步骤就解析到了这个对象返回给开发者调用。
        3. a p p [ app[ app[name], 实现了 php的ArrayAccess 接口
  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值