php依赖注入框架pimple中文文档

php依赖注入框架pimple中文文档今天 2017 07 16 本文是对 pimple 框架的翻译 真是轻松愉快 因为文档十分简短而且简单 另外 这是一个非常好用的框架 建议同学们尽量使用 学习 pimple 的两大好处 1 很多 php 框架都已经用到了 pimple 本身就需要学习使用方法 2 项目中如本来没有 pimple 可以主动使用 pimple 则做项目的单元测试时就可以轻松替换外部环境 正文如下官方文档

今天: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许可发放。




















































































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228479.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:55
下一篇 2026年3月16日 下午6:55


相关推荐

  • 贝塞尔方程与贝塞尔函数学习笔记

    贝塞尔方程与贝塞尔函数学习笔记《数学物理方法(顾樵)》第13章学习笔记第一节几个微分方程的引入三维波动方程:∂2v∂t2=a2(∂2v∂x2+∂2v∂y2+∂2v∂z2)≡a2∇2v\frac{\partial^2v}{\partialt^2}=a^2(\frac{\partial^2v}{\partialx^2}+\frac{\partial^2v}{\partialy^2}+\frac{\partial^2v}{\partialz^2})\equiva^2\nabla^2v∂t2.

    2025年7月24日
    5
  • resultMap和resultType 的区别

    resultMap和resultType 的区别Mybatismappe xml 中 resultMap 和 resultType 的区别一 resultType 指定输出结果的类型 将 sql 输出结果映射到为 java 对象使用 resultType 时 需要注意此时 sql 语句的列名必须与指定 pojo 类的属性名称保持一致 否则无法完成映射 二 resultMap 如果 sql 语句的列名必须与指定 pojo 类的属性名称 b 不一致 可以利用将列

    2026年3月17日
    1
  • linux tcptraceroute tcpping安装使用

    linux tcptraceroute tcpping安装使用1.首先安装依赖包libpcapyuminstall-ylibpcap2.下载tcptracerouterpm包,并安装rpm-ivhtcptraceroute-1.5-0.beta7.el6.rf.x86_64.rpmtcptraceroute121.46.29.1155810-n-q1tracerouteto121….

    2022年6月20日
    55
  • EFCore实现数据库水平分表的方法

    EFCore实现数据库水平分表的方法MySQL 使用 EFCore 框架水平分表的实现方法 即一个实体映射到多个数据表 通过该方法可以实现动态映射 根据不同的条件映射到不同的数据表

    2026年3月17日
    1
  • SQLyog 64位激活成功教程版 v12.09[通俗易懂]

    SQLyog 64位激活成功教程版 v12.09[通俗易懂]激活成功教程教程1、安装完成后运行软件,启动时选择“简体中文”语言种类启动软件;image2、选择完成后弹出注册窗口,我们将软件的注册码:名称:ddooo;证书秘钥:8d8120df-a5c3-4989-8f47-5afc79c56e7c;逐一填到软件的注册框内,点击“注册”按钮,sqlyog会自动检测注册信息;image3、当出现下图软件注册成功的提示时,软件成功注册激活;image…

    2026年3月2日
    5
  • SPSS 方差分析

    SPSS 方差分析统计学上的因素是指研究者关心的实验条件 而水平是指因素的具体表现形式 6 1 单因素方差分析 6 1 1 原理单因素方差分析仅研究了单个研究因素 该因素有多个水平 3 如果为 2 个水平就用 T 检验了 方差分析就是通过分析处理组均数之间的差别 推断试验所代表的多个总体均数间是否存在差别 其原理是将全部观察数据的变异 总变异 分解为组间变异和组内变异 如果组间的变异远远大于组内变异 则有理由认为本次研究的因素发挥着作用 1 总变异 每个实验对象数据与总体均数的差异 2 组间变异 各处理

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号