pimple学习:源码解读

pimple学习:源码解读

个人理解,请轻拍233

1.对Container类的解读

Container类继承一个php数组对象接口,在程序整个生命周期中,各种属性、方法、对象、闭包都可以注册其中。这体现出了面向对象编程中的依赖注入(控制反转)的法则,以消减对象间的耦合程度。

Container的成员变量:

  1. values:存储需要注入的对象
  2. factories: SplObjectStorage类型,存储对象
  3. protected: SplObjectStorage类型
  4. frozen:存储被冻结的对象
  5. raw: 存储方法
  6. keys:存储values中的key值(bool)

理解:

  1. values 和factory的区别: 每次从values得到的都是同一个实例,从factory得到的是不同的实例。factory存的是构建实例的方法。
  2. protected:用来存储匿名方法

Container的成员方法:

  1. 构造函数:
  2. offsetSet:根据传入的id名和对象,若未被冻结,则存储在values 和 keys中
  3. offsetGet:根据传入的id的值,返回存储在values中的对象
  4. offsetExists:根据传入的id值,判断是否该对象已经存在
  5. offsetUnset:根据传入的id值,移除存储的对象
  6. factory: 将传入的callable回调函数保存到factory中(先判断是否有__invoke()方法,确保其闭包),返回通过的回调函数
  7. protect:将传入的callable回调函数保存到protected中(先判断是否有__invoke()方法,确保其闭包)返回通过的回调函数
  8. raw:根据传入的id,如果keys中不存在id,抛出异常,否则如果row中存在id键值的对象,返回该对象,否则返回values中存储的对象
  9. extend:根据传入的id 和 回调函数 ,如果id不存在,回调函数不是对象或闭包,values[id]中的值不是对象或闭包,则抛出异常。移除原有对象,添加修改后的对象
  10. keys:返回values中的所有key值
  11. register:注册方法

理解:

  1. extend函数的作用: 修改已经被保存的service。

特点:

  1. Container类继承php数组对象接口,所以在注册的时候可以这样
$container['session_storage'] = function ($c) {
    return new SessionStorage('SESSION_ID');
};

设计模式:

factory()方法 像简单工厂模式,存着产生实例的方法,通过调用相应的方法得到实例。

在rigister方法中,通过接口传递参数,体现了面向对象编程中的 面向接口编程原则。同时
通过组合实现容器的扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值