franco2911 / avresticontainer
轻量级且灵活的 PHP 控制反转(IoC)容器
1.0.1
2024-06-25 06:58 UTC
Requires
- php: ^8.3
Requires (Dev)
- filp/whoops: ^2.7
- phpunit/phpunit: ^11.2
- symfony/var-dumper: ^5.1
This package is auto-updated.
Last update: 2024-09-25 07:32:28 UTC
README
AvrestiContainer 是一个轻量级且灵活的 PHP 依赖注入(DI)容器。它允许您以简单直观的方式管理类依赖和执行依赖注入。
特性
- 简单绑定:将类和接口绑定到具体实现。
- 单例:轻松注册和解析单例。
- 方法注入:将依赖注入到类方法中。
- 别名:为绑定创建别名以简化依赖解析。
- 依赖解析:自动解析和注入类依赖。
- 可配置定义:使用
addDefinitions
在单次调用中添加多个定义。 - 自动装配:无需显式绑定自动解析类依赖。
安装
您可以通过 Composer 安装 AvrestiContainer。
composer require franco2911/avresticontainer
使用
基本用法
以下是使用 AvrestiContainer 的基本示例
require __DIR__ . '/vendor/autoload.php'; use Avresticontainer\Container; $container = Container::getInstance(); $container->bind('config', function() { return new class { public function get($key) { return $key; } }; }); $config = $container->make('config'); echo $config->get('example_key'); // Outputs: example_key
使用单例
注册和解析单例
$container->singleton('config', function() { return new class { public $value = 'singleton_value'; }; }); $config1 = $container->make('config'); $config2 = $container->make('config'); $config1->value = 'new_value'; echo $config2->value; // Outputs: new_value
添加定义
您可以使用 addDefinitions
添加多个定义
$container->addDefinitions([ 'config' => function() { return new Config(['db_host' => '127.0.0.1', 'db_name' => 'my_database']); }, 'database' => function($container) { return new DatabaseConnection($container->make('config')); }, 'simple.value' => 'This is a simple value' ]); $config = $container->make('config'); $database = $container->make('database'); $simpleValue = $container->make('simple.value');
使用别名
创建和使用绑定别名
$container->bind('original', function() { return new class { public function getValue() { return 'original value'; } }; }); $container->alias('original', 'alias'); $original = $container->make('alias'); echo $original->getValue(); // Outputs: original value
自动装配
AvrestiContainer 可以自动解析类依赖
class DependencyA { public function getValue() { return 'valueA'; } } class DependencyB { protected $dependencyA; public function __construct(DependencyA $dependencyA) { $this->dependencyA = $dependencyA; } public function getDependencyValue() { return $this->dependencyA->getValue(); } } $container->bind(DependencyA::class); $container->bind(DependencyB::class); $dependencyB = $container->make(DependencyB::class); echo $dependencyB->getDependencyValue(); // Outputs: valueA
许可证
此库采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。
贡献
我们欢迎贡献!请随时提交拉取请求或在 GitHub 上打开问题。
致谢
受到各种 PHP DI 容器的启发,AvrestiContainer 致力于成为管理 PHP 应用程序依赖的简单而强大的工具。
联系
有关任何问题或查询,请在 GitHub 上创建问题。