corpus / di
简单而强大的PSR-11兼容Di容器
v2.4.0
2023-09-19 20:55 UTC
Requires
- php: >=7.4
- psr/container: ~1.0 || ~2.0
Requires (Dev)
- corpus/coding-standard: ^0.6
- friendsofphp/php-cs-fixer: ^3.27
- phpunit/phpunit: ~9.0
- squizlabs/php_codesniffer: ^3.5
Provides
This package is auto-updated.
Last update: 2024-08-30 01:20:04 UTC
README
简单的PSR-11兼容Di容器
要求
- php: >=7.4
- psr/container: ~1.0 || ~2.0
安装
使用以下命令安装最新版本:
composer require 'corpus/di'
用法
使用Di开始,以下是最重要的三个方法。
- 使用
set
方法设置返回的项目或用于懒加载构建的lambda,可选项地接受构造函数参数。 - 使用
get
方法用于在初始的懒加载后检索值,具有记忆功能。 - 使用
getNew
用于在每次调用时调用懒加载创建lambda,可选项地接受一个包含构造函数参数的数组作为第二个参数。
<?php require 'vendor/autoload.php'; $di = new \Corpus\Di\Di; // Eager Loading $di->set('foo', new Foo); $di->get('foo'); // the Foo instance from above // --- --- --- --- --- --- // Lazy Loading $di->set('bar', function () { return new Bar; }); // Value is memoized, new Bar() is only called once at first `get`. $bar1 = $di->get('bar'); $bar2 = $di->get('bar'); // --- --- --- --- --- --- // Constructor Parameters $di->set('baz', function ( $qux ) { return new Baz($qux); }); // Calling getNew explicitly avoids the memoization. Constructor params passed as array. $baz = $di->getNew('baz', [ 'corge' ]); $baz2 = $di->getNew('baz', [ 'grault' ]); // --- --- --- --- --- --- // Auto-Constructor Parametrization $di->set('qux', Qux::class); $qux1 = $di->get('qux'); // New instance of Qux $qux2 = $di->get('qux'); // Memoized instance of Qux // --- --- --- --- --- --- // Lazy Loading with auto-arguments. $di->set('quux', function ( Qux $qux ) { return new Quux($qux); }); $quux = $di->get('quux'); // Instance of Quux given the previous instance of Qux automatically // --- --- --- --- --- --- // getMany lets you retrieve multiple memoized values at once. [$foo, $bar] = $di->getMany([ 'foo', 'bar' ]); // getManyNew lets you retrieve multiple new values at once, providing for arguments. [$baz, $baz2] = $di->getManyNew([ [ 'baz', [ 'corge' ] ], [ 'baz', [ 'grault' ] ] ]); $di->callFromReflectiveParams(function (Bar $bar, Baz $baz){ // Callable called with parameters automatically populated based on their name // $bar => 'bar' }); // Construct a class auto-populating constructor parameters based on their name $controller1 = $di->constructFromReflectiveParams(MyController::class); $controller2 = $di->constructFromReflectiveParams('MyController');
文档
类:\Corpus\Di\Di
方法:Di->getMany
function getMany(array $ids) : array
检索多个项目;如果存在则缓存。与list()一起使用。
参数
- string[]
$ids
- 项目名称/键
返回
- array
方法:Di->get
function get($id)
通过标识符查找容器中的条目并返回它。
参数
- string
$id
- 要查找的条目的标识符。
抛出: \Psr\Container\NotFoundExceptionInterface
- 对于此标识符没有找到条目。
抛出: \Psr\Container\ContainerExceptionInterface
- 获取条目时出错。
返回
- mixed - 条目。
方法:Di->getManyNew
function getManyNew(array $data) : array
检索多个项目。与list()一起使用。
参数
- array[]
$data
- 包含项目(名称/键/参数)对元组的数组
抛出: \InvalidArgumentException
返回
- array
方法:Di->getNew
function getNew(string $id [, array $args = []])
检索一个项目
参数
- string
$id
- 项目的名称/键 - array
$args
抛出: \Corpus\Di\Exceptions\UndefinedIdentifierException
方法:Di->duplicate
function duplicate(string $src, string $dest)
将给定值克隆到第二个键
参数
- string
$src
- 来源 - string
$dest
- 目的地
方法:Di->set
function set(string $id, $value)
通过键存储一个值以供以后检索
参数
- string
$id
- 项目的名称/键 - mixed
$value
- 要存储的值
方法:Di->has
function has($id) : bool
如果容器可以为给定的标识符返回条目,则返回true。
否则返回false。
has($id)
返回true并不意味着get($id)
不会抛出异常。
但它确实意味着get($id)
不会抛出NotFoundExceptionInterface
。
参数
- string
$id
- 要查找的条目的标识符。
返回
- bool
方法:Di->raw
function raw(string $id)
参数
- string
$id
- 要检索的名称/键
抛出: \Corpus\Di\Exceptions\UndefinedIdentifierException
方法:Di->constructFromReflectiveParams
function constructFromReflectiveParams(string $className [, array $initials = []]) : object
使用反射来执行具有自动填充参数的类的构造函数
参数
- string
$className
- 要构建的类 - array
$initials
- 参数的有序列表,用于在构造函数上填充初始参数
方法:Di->callFromReflectiveParams
function callFromReflectiveParams(callable $callable [, array $initials = []])
使用反射来执行具有自动填充参数的可调用对象
参数
- array
$initials
- 参数的有序列表,用于在可调用对象上填充初始参数
返回
- mixed - 可调用对象的返回值。
类:\Corpus\Di\Exceptions\UndefinedIdentifierException
当尝试检索不存在的键时抛出。