outglow / community
Outglow PSR-0 依赖注入容器
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-22 04:20:52 UTC
README
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