定制 beige/psr-11 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

beige/psr-11

Composer 安装命令:

composer require beige/psr-11

包简介

The container implementation of PSR-11.

README 文档

README

GitHub license LICENSE Coverage 100%

一个 PSR-11 标准容器

The container implementation of PSR-11.

简介

Beige PSR-11 是一个轻量级的 PSR-11 标准容器。它的目标是将容器的使用变得更加简单和纯粹,它能够接受任意类型的数据,并将 Definition 分离。

安装

composer require beige/psr-11

使用

引入并创建容器的实例:

use Beige\Psr11\Container;

$container = new Container();

读写操作

可以在容器初始化的时候向容器写入数据,数据项的索引必须是字符串类型:

$container = new Container([
    'foo' => 'bar'
]);

Beige\Psr11\Container 实现了 ArrayAccess 接口,支持以数组的形式操作数据:

$container['foo'] = 'bar';
isset($container['foo']);  // true
unset($container['foo']);

如果根据索引无法找到数据,Container 会抛出一个 Beige\Psr11\Exception\NotFoundException 异常

定义 (Definition)

“定义”是一个可调用对象,它定义了生成一个数据的具体过程,并返回数据本身。容器可以利用“定义”来生成最终的数据。这里,我们使用 Beige\Psr11\DefinitionCollection 保存一个定义的集合,传入 container 中:

$definitionCollection = new DefinitionCollection([
    'foo' => function($container) {
        return 'bar';
    }
]);

$container = new Container([], $definitionCollection);
$container['foo'];  // bar

Beige\Psr11\Container 构造函数的第二个参数可选,接受一个 Beige\Psr11\Interfaces\DefinitionCollectionInterface 接口的实例,当 Container 找不到某个索引的数据时,会查询 DefinitionCollection 中 对这个索引的“定义”,如果存在定义,容器就会利用定义生成具体数据并保存在容器中。Container 将延用 Definition 的索引。

Beige\Psr11\DefinitionCollection 与容器对象一样支持数组形式的操作:

use Beige\Psr11\Container;
...

$definitionCollection['foo'] = function(Container $c) {
    return 'bar';
};

在默认情况下,Container 会把自身传给 Definition 的第一个参数,如上例所示,这样,你就可以在 Definition 内部获取容器中的其他数据,帮助当前的 Definition 生成数据。当然,你也可以定义一个“非常规”的 Definition,并用 Beige\Psr11\Container::make 方法生成数据:

$definitionCollection['foo'] = function($num1, $num2) {
    return $num1 + $num2;
};

$container = new Container([], $definitionCollection);
$container->make('foo', [1, 2]);  // 3

Beige\Psr11\Container::make 方法的第一个参数是 Definition 的索引 (注意:不是容器数据的索引);第二个参数是一个数组,是传给 Definition 的参数列表。 用 make 方法生成的数据会直接返回,且不会保存在容器中,也就是说,每调用一次 make 方法,都会重新生成一次数据!

使用 Definition 可以在需要时才生成数据,省却了不必要的消耗。推荐使用者将初始化消耗较大的数据转化为 Definition.

统计信息

  • 总下载量: 22
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 1

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-08-01

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固