johnroyer/php-easy-container

一个简单的Composer插件

v1.1.1 2019-10-28 12:48 UTC

README

Build Status Coverage Status

单例和某些功能的实现。

要求

  • PHP >= 5.6

安装

使用composer

composer require johnroyer/php-easy-container

简单用法

将您想要的内容放入容器中

use \Zeroplex\Container\Container;

$c = new Container;

// set value as singleton
$c['pi'] = 3.14159;
$c['db'] = new PDO(
    'mysql:dbname=mydb;host=localhost',
    'user',
    'password'
);

从容器中获取内容

$c['pi'];  // 3.14159
$c['db'];  // object(PDO)

单例

如果您使用 ArrayAccess 接口从容器访问数据,容器将它们视为单例,如下例所示。

您还可以使用方法 singleton() 将数据放入容器

$c->singleton('db') = new PDO(
    'mysql:dbname=mydb;host=localhost',
    'user',
    'password'
);

$c->get('db');  // object(PDO)

您还可以将全局变量放入容器

$c->singleton('config') = new Config(
    APP_ROOT . '/config'
);

$c['config']['app.name'];

延迟初始化

有时,您不确定一个数据库连接是否应该在程序启动时初始化。也许在真正需要时连接到数据库是一个更好的主意。

使用 Closure 让容器知道您想稍后初始化它

$c['db'] = function () {
    return new PDO(
        'mysql:dbname=test;host=localhost',
        'user',
        'password'
    );
};

$c->get('db');  // new PDO if and only if someone get it
                // object(PDO)

提供

容器可以包含有状态和无状态的内容。 provide() 方法存储无状态的业务逻辑或工作流程。

$c->provide('pi', 3.14159265359);
$c['pi'];  // 3.14159265359

$c->provide('nowDate', function() {
    // always return special format of date
    return (new DateTime())
        ->format('Y-m-d');
});
$c->['nowDate'];  // "2017-12-01"