irfantoor / container
Irfan的容器:使用单一API抽象多种类型的容器。
1.3.1
2022-11-15 14:40 UTC
Requires
- league/flysystem: ^2.0
- opis/closure: ^3.6
- psr/container: ^1.0
Requires (Dev)
- irfantoor/super-lamp: ^0.1.1
- irfantoor/test: ^0.8
Provides
- psr/container-implementation: 1.0.0
README
注意:此README将很快更新,它反映了v1.0.4的功能
容器
实现了Psr\ContainerInterface、ArrayAccess、Countable和IteratorAggregate接口的容器。
标识符可以使用点表示法来访问分层级别的标识符,例如,要访问$container['environment']['headers']['host']
,您可以按点表示法编写:$config['environment.headers.host']
初始化
您可以在创建新实例时传递键值对数组来初始化,它将使用内存中的数组来处理这种情况。
<?php use IrfanTOOR\Container; $container = new IrfanTOOR\Container( # id => values 'app' => [ 'name' => 'My App' 'version' => '1.1', ] );
设置
您可以使用'method'方法通过'get'方法在容器中设置服务。
use IrfanTOOR\Container; $container = new IrfanTOOR\Container(); # setting hello => world $container->set('hello', 'world'); # using an array notation $container->set(['hello' => 'world']); # defining multiple $container->set([ 'hello' => 'world', 'box' => 'empty', 'something' => null, 'array' => [ 'action' => 'go', 'step' => 1, ], ]); # defining sub values $container->set('app.name', 'Another App'); $container->set('debug.level', 2); # defining a factory service $container->factory('hash', function(){ $salt = rand(0, 10000); return md5($salt . time()); });
使用数组访问机制
$container['hello'] = 'world'; $container['debug.log.file'] = '/my/debug/log/file.log';
获取
您可以使用'method'方法通过其标识符从容器中获取存储的值或服务的结果。
# returns a random hash $hash = $container->get('hash');
您也可以使用数组访问
$hash = $container['hash'];
检查容器中是否存在值
您可以使用'method'方法检查容器是否具有具有标识符id的条目。
if ($container->has('hash')) { # this will be executed even if the given identifier has the value NULL, 0 # or false echo 'random hash : ' . $container->get('hash'); }
使用数组访问,上述代码将变为
if (isset($container['hash']) { # this will be executed even if the given identifier has the value NULL, 0 # or false echo 'random hash : ' . $container['hash']; }
删除条目
您可以使用'method'方法或对元素使用'unset'来删除条目。
# using method remove $container->remove('hash'); # using unset unset($container['hash']);
容器到数组
可以使用'method'方法将容器转换为数组。
$array = $container->toArray();
服务标识符数组
可以通过使用'method'方法检索服务标识符数组。
$services = $container->keys();
计数
可以使用'method'方法检索容器中存在的项数。请注意,它将返回基本级别的项数。
# will return 1 for the Collection defined in initialization section $count = $container->count();
迭代
容器可以直接用于foreach循环或使用迭代器的地方。例如,以下代码
foreach($container->toArray() as $k => $v) { $v->close(); }
可以简化为
foreach($container as $k => $v) { $v->close(); }