糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > php依赖注入框架pimple中文文档

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

时间:2020-02-20 01:59:20

相关推荐

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

今天:-07-16

本文是对pimple框架的翻译,真是轻松愉快,因为文档十分简短而且简单。

另外,这是一个非常好用的框架,建议同学们尽量使用。

学习pimple的两大好处:

1、很多php框架都已经用到了pimple,本身就需要学习使用方法。

2、项目中如本来没有pimple,可以主动使用pimple,则做项目的单元测试时就可以轻松替换外部环境。

正文如下

官方文档原地址:[url]/[/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 /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中文文档》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。