您的位置:首页 > 编程语言 > PHP开发

pimple学习:源码解读

2016-07-28 19:56 387 查看

pimple学习:源码解读

个人理解,请轻拍233

1.对Container类的解读

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

Container的成员变量:

values:存储需要注入的对象

factories: SplObjectStorage类型,存储对象

protected: SplObjectStorage类型

frozen:存储被冻结的对象

raw: 存储方法

keys:存储values中的key值(bool)

理解:

values 和factory的区别: 每次从values得到的都是同一个实例,从factory得到的是不同的实例。factory存的是构建实例的方法。

protected:用来存储匿名方法

Container的成员方法:

构造函数:

offsetSet:根据传入的id名和对象,若未被冻结,则存储在values 和 keys中

offsetGet:根据传入的id的值,返回存储在values中的对象

offsetExists:根据传入的id值,判断是否该对象已经存在

offsetUnset:根据传入的id值,移除存储的对象

factory: 将传入的callable回调函数保存到factory中(先判断是否有__invoke()方法,确保其闭包),返回通过的回调函数

protect:将传入的callable回调函数保存到protected中(先判断是否有__invoke()方法,确保其闭包)返回通过的回调函数

raw:根据传入的id,如果keys中不存在id,抛出异常,否则如果row中存在id键值的对象,返回该对象,否则返回values中存储的对象

extend:根据传入的id 和 回调函数 ,如果id不存在,回调函数不是对象或闭包,values[id]中的值不是对象或闭包,则抛出异常。移除原有对象,添加修改后的对象

keys:返回values中的所有key值

register:注册方法

理解:

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

特点:

Container类继承php数组对象接口,所以在注册的时候可以这样

$container['session_storage'] = function ($c) {
return new SessionStorage('SESSION_ID');
};


设计模式:

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

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

通过组合实现容器的扩展。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息