今天:2017-07-16
本文是对pimple框架的翻译,真是轻松愉快,因为文档十分简短而且简单。
另外,这是一个非常好用的框架,建议同学们尽量使用。

学习pimple的两大好处:
1、很多php框架都已经用到了pimple,本身就需要学习使用方法。
2、项目中如本来没有pimple,可以主动使用pimple,则做项目的单元测试时就可以轻松替换外部环境。

正文如下
官方文档原地址:[url]https://pimple.symfony.com/[/url]
[size=x-large]pimple | 一个简单的php依赖注入容器[/size]

这是 pimple 3.x 的文档,如果你正在使用 pimple 1.x,请阅读 pimple 1.x 的文档。阅读 pimple 1.x 的源代码也是一个学习关于如何创建 pimple 1.x 的容器的好方法。(当前版本的pimple更多关注了性能)

pimple 是一个很小的php的依赖注入容器。

[size=large]安装[/size]
在应用 pimple 到你的项目之前,先把下面的代码加入到你的 composer.json。(译注:只要在 shell 执行这个命令即可)

$ ./composer.phar require pimple/pimple ~3.0

或者,pimple 也可以作为php的c扩展获得

$ git clone https://github.com/silexphp/Pimple$ cd Pimple/ext/pimple$ phpize$ ./configure$ make$ make install

[size=large]用法[/size]
创建容器基本上就是创建一个[b]container[/b]实例。

use Pimple\Container;$container = new Container();

就象一些其他的依赖注入容器一样,pimple 管理着两种不同类型的数据:服务(services)和参数(parameters)(译注:参数就是一般项目的里的配置文件的参数,服务就是一个全局对象)

[size=large]定义服务[/size]
服务作为一个更大系统(译注:即我们的一个项目)的一部分,就是一个可以做一些事情的对象。例如:一个数据库连接,一个模板引擎,一个邮件发送器,几乎任何全局对象都可以作为一个服务。

服务被一个匿名函数定义,并返回一个对象的实例。

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

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

注意到这个匿名函数可以访问当前容器的实例,也可以引用别的服务或参数。
一个对象只会在你想使用他们的时候才会创建,所以定义的顺序无关紧要。

使用定义好的服务是很容易的:

// get the session object 得到session对象$session = $container['session'];

// the above call is roughly equivalent to the following code:// 上面这个调用大体上等同于下面的代码// $storage = new SessionStorage('SESSION_ID');// $session = new Session($storage);

[size=large]定义工厂服务[/size]
默认的,每次你得到一个服务,pimple 返回相同的实例。如果你想要每次调用返回一个不同的实例,用工厂方法包装你的匿名函数

$container['session'] = $container->factory(function ($c) {    return new Session($c['session_storage']);});

现在每次调用 $container['session'] 返回一个新的会话实例。

[size=large]定义参数[/size]
定义参数可以让你很容易的从外部配置你的容器,并存储到全局变量里。

// define some parameters 定义一些参数$container['cookie_name'] = 'SESSION_ID';$container['session_storage_class'] = 'SessionStorage';

如果你想想改变 [b]session_storage[/b] 服务,可以象下面这样。

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

现在你可以通过覆盖 session_storage_class 参数而不是重新定义这个服务,来很容易的改变 cookie name。

[size=large]保护参数[/size]
因为 pimple 用匿名函数定义服务,你需要用 protect 方法包装匿名函数来存储参数(译注:我估计就是只能定义一次,不能再改了)

$container['random_func'] = $container->protect(function () {    return rand();});

[size=large]定义后再修改服务[/size]
在一些例子中,你可能想要修改一个定义过的服务,你可以使用extend 方法来添加定义代码,在这个服务的实例已被创建出来的情况下。

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

$container->extend('session_storage', function ($storage, $c) {    $storage->...();

    return $storage;});

第一个参数是延伸的服务的名字,第2个函数可以访问对象实例和容器。

[size=large]扩展容器[/size]
如果你一次次的使用同样的类库,你可能想要把这些代码抽取出来,以复用到你的下个项目,打包你的服务,通过实现接口 Pimple\ServiceProviderInterface:

use Pimple\Container;

class FooProvider implements Pimple\ServiceProviderInterface{    public function register(Container $pimple)    {        // register some services and parameters        // on $pimple    }}

然后,在容器里注册这个提供者。

$pimple->register(new FooProvider());

[size=large]提取定义时创建的函数[/size]
当你访问一个对象时,pimple 会自动调用你定义的匿名函数,它会为你创建服务对象。如果你想获得原生函数,您可以使用raw()方法:

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

$sessionFunction = $container->raw('session');

[size=x-large]谁在支持 pimple[/size]
pimple 是 symfony框架的创建器 Fabien Potencier 带给你的。pimple根据MIT许可发放。

php依赖注入框架pimple中文文档相关推荐

  1. Spring 系列框架的中文文档

    现在互联网上的 Spring 框架相关的中文文档基本上都是机器翻译,内容晦涩难懂且常年未更新.例如,像 spring-security 等这种概念繁多,体系复杂的技术,对于新手来说,没有优质的技术文档 ...

  2. Unity简单的轻量级ECS框架 LeoECS中文文档

    LeoECS - 简单的轻量级 C# 实体-组件-系统框架 性能,零/小 内存 分配/占用空间,这个项目的主要目标--不依赖于任何游戏引擎. **重要!**它是"基于结构"的版本, ...

  3. Keras 深度学习框架中文文档

    2019独角兽企业重金招聘Python工程师标准>>> Keras深度学习框架中文文档 Keras官网:http://keras.io/ Github项目:https://githu ...

  4. keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

    版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNN​zhuanlan.zhihu.com [使用 ...

  5. semantic ui中文文档_Vuetify-广受欢迎的Material风格的开源UI框架

    全世界范围内广受欢迎的 Vue UI 框架,一个非常精致的 Material Design UI 套件. Material Design 风格 UI 框架 Vuetify 是一个基于 Vue.js 精 ...

  6. vuetify中文文档_我们为什么选择Vuetify作为前端框架

    尝试了很多不同的前端框架,最终我们选择Vuetify(https://vuetifyjs.com)前端框架. 从Bootstrap开始,到iview,Buefy,elementUI,我们都是不断的尝试 ...

  7. thinkjs能在浏览器html文件,thinkjs框架的默认模板引擎Nunjucks的中文文档

    Node 端使用 $ npm install nunjucks 0 $npminstallnunjucks 下载后可直接 require('nunjucks') 使用 浏览器端使用 可直接使用 nun ...

  8. Backtrader官方中文文档

    代码有所删减,完整版及在线运行可访问Backtrader官方中文文档 一. backtrader介绍 制定策略 1.1 确定潜在的可调参数 1.2 实例化您在策略中需要的指标 1.3 写下进入/退出市 ...

  9. Springboot 中文文档 —— Actuator

    文章目录 1 **启用** 2 **端点(endpoints)** 2.1 启用端点 2.2 公开端点 2.3 保护HTTP端点 2.4 配置端点缓存 2.5 配置 /actuator 路径 2.6 ...

  10. Spring Security中文文档

    Spring Security中文文档 来源:https://www.springcloud.cc/spring-security.html#overall-architecture 作者 Ben A ...

最新文章

  1. 2021年春季学期-信号与系统-第三次作业参考答案-第三道题
  2. 自定义Quartz超实用工具类
  3. bzoj 2179 FFT快速傅立叶
  4. 华硕飞行堡垒开启虚拟化
  5. Chrome安装metamask
  6. linux修改mac ethtool,ethtool命令
  7. mysql8.0.15调优_Mysql 8.0 参数调优
  8. spring mysql 多数据源_spring框架学习【多数据源配置】
  9. 微服务架构如何实现网站服务垂直化拆分
  10. GitHub 又一 OCR 神器面世!让你快速告别「复制 + 粘贴」!
  11. 算法: 239. 滑动窗口的最大值
  12. 用代理IP进行简单的爬虫——爬高匿代理网站
  13. ps黑作坊终极天空大师 一键换天空终极版破解版扩展面板
  14. Coredump-N, segfault at 0 ip 0000000000000000 sp; 被kernel 抓到
  15. 计算机学院毕设翻译模版,计算机毕设外文翻译
  16. Latex(texlive)安装配置教程(详细)
  17. 什么是spurious wakeups(虚假唤醒)
  18. 网路连接配置和DNS服务?解决无线网卡连接WIFI问题(硬件和驱动没问题)?
  19. 用matlab编写驻波图,用驻波法测声速的Matlab模拟
  20. 第三方登录mysql表_浅谈数据库用户表结构设计,第三方登录

热门文章

  1. 计算一阶导数的四阶中心差分格式
  2. php图片上传保留第一帧,七牛云上传视频怎么截取第一帧为图片
  3. Excel单元格的相对绝对混合引用
  4. 360路由器远程连接服务器,360路由器如何开启端口映射?
  5. [高项]工作绩效数据 vs工作绩效信息 vs工作绩效报告
  6. word文档批量处理表格
  7. 离散数学 | 数理逻辑
  8. 【学神IT教育渗透第一部分】
  9. virt-install命令详解
  10. 世界线(bzoj2894)(广义后缀自动机)