outglow/community

此软件包最新版本(dev-master)没有可用的许可信息。

Outglow PSR-0 依赖注入容器

dev-master 2013-01-23 20:31 UTC

This package is not auto-updated.

Last update: 2024-09-22 04:20:52 UTC


README

Build Status

Community 是一个为 PHP 5.3.0 + 设计的小型简单依赖注入容器

  • PSR-0 兼容
  • 易于使用
  • 稳定

安装

outglow/community 添加到您的 composer.json 文件中

{
    "require" : {
        "outglow/community" : "dev-master"
    }
}

然后运行: php composer.phar install (注意:可能需要先进行更新)

API

public function set(String $key, Closure $return, [ Bool $newInstance = false ])

public function stack(Array $classes, [ Bool $newInstance = false ])

public function get(String $key)

public function remove(String $key)

用法

假设这是一个您想通过 community 对象访问的类

<?php
    class World
    {
        public function sayHello()
        {
            return 'Hello';
        }
    }
?>

为了简便,我将仅包括此类,但您实际上应该使用类加载器 ;)

include('vendor/autoload.php');
include('World.php');

use Outglow\Component\Community\Community;

$community = new Community();

$community->set('world', function() {
    return new World();
});

$world = $community->get('world');

echo $world->sayHello();

在这里,我们创建了 community 对象,然后使用匿名函数通过 set 返回我们的新类 World 的对象

然后我们使用 get 通过容器访问我们的新对象,并可以通过它调用 sayHello() 方法。

这只是一个非常基本的例子,但它可以用在各种方式中。

扩展

我们还可以选择每次我们使用 get community 对象时,它是否创建该类的新实例,或者一个共享实例,这意味着它将只创建该类的一个实例,该实例将存储在您的容器中。

$community->set('world', function() {
    return new World();
}, true);

传入 true(如上所示)将告诉 community 我们希望在每次使用 get 方法时实例化该类的新实例,而留空则

$community->set('world', function() {
    return new World();
});

将使我们每次都使用相同的对象实例。

现在我们还可以使用 remove 方法从容器中删除任何给定的对象。从上面的例子继续,这是我们从容器中删除 world 的方法

$community->remove('world');

这可以在分配/使用 world 对象之后完成,也许您不再需要它在容器中,这将稍微释放一些内存。

从版本 1.2 开始,我们可以使用公共方法,stack。如果您要存储具有相同配置的一组对象,则可以使用它。但是,它不仅限于类/对象。任何东西都可以放入其中,下面是一个存储对象和字符串的例子

$community->stack(array(
    'myString' => 'Hello',
    'myObject' => '\stdClass'
));

我们将类作为字符串传递,然后 Community 从它创建一个新的对象,如果该类可用。然而,我们也可以仅将数据存储为字符串,只要该字符串不与类名冲突。它不仅限于字符串,可以是任何类型的数据。

测试

最近添加了单元测试,以及一个用于 ant 的构建文件。您可以通过以下方式测试:

$ cd /path/to/community
$ ant

仅使用 phpunit?

$ cd /path/to/community
$ phpunit tests