irfantoor/container

Irfan的容器:使用单一API抽象多种类型的容器。

1.3.1 2022-11-15 14:40 UTC

This package is auto-updated.

Last update: 2024-09-15 21:19:54 UTC


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();
}