dastur / capsule
依赖注入容器。
Requires
- php: >=5.6
- psr/container: ^1.0
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is not auto-updated.
Last update: 2024-09-29 03:47:05 UTC
README
Capsule 是一个 PHP 依赖注入容器。它允许您将实例绑定到容器中,以便在需要时检索它们。如果您想确保没有依赖项被隐藏,可以使用此包提供的自动依赖注入。
目录
安装
Composer
从您的项目基础目录运行以下命令
composer require dastur\dastur
用法
要开始使用 capsule,请创建一个新的 Capsule 实例。
$capsule = new Capsule();
绑定
要将类绑定到容器,请使用 bind 方法
$capsule->bind(string $name, mixed $path, callable $value, boolean $singleton = false)
$name 参数是绑定的别名。$path 参数是一个类常量或字符串(包含完整的命名空间)。当 Capsule 需要解析类的依赖项时,会使用它。$value 参数是返回您所绑定服务的可调用对象。$singleton 参数是指定实例是否只解析一次。
示例
$capsule->bind('service', Service::class, function() { return new Service(); });
默认情况下,Capsule 每次从容器中获取某物时都会创建一个新的实例。如果您想只解析一次,请使用 singleton() 方法。
$capsule->singleton('service', Service::class, function() { return new Service(); });
解析
当您需要从容器中获取实例时,请使用 get 方法
$capsule->get(mixed $name)
$name 参数是正在解析的类的名称或类常量。此方法只会解析存储在 Capsule 中的类。
示例
$capsule->get('service') or $capsule->get(Service::class)
或者,您可以使用以下语法
$capsule->service or $capsule['service']
如果您需要创建一个未绑定在容器中的类,请使用 make 方法。
$capsule->make(mixed $path, array $parameters = [])
$path 是您正在解析的类的类常量。您也可以使用字符串作为此参数,但请确保其格式正确,否则会抛出错误。$parameters 参数是您要定义的覆盖数组。
例如
假设您有一个名为 Service 的类,它依赖于 AnotherService,并且其构造函数需要一个随机字符串。
<?php namespace Package\Service class Service { public $anotherService; public $string; public function __construct(AnotherService $anotherService, $string) { $this->anotherService = $anotherService; $this->string = $string; } }
现在,使用 make 方法,Capsule 可以为您解析此服务。
$service = $capsule->make(\Package\Service::class, ['string' => 'randomString')
现在,如果您尝试访问 $string 和 $anotherService 属性,它们将分别返回 randomString 和 AnotherService 实例。
这对于在容器中绑定了一些重要的单例(例如 Router、Logger 等)特别有用。Capsule 可以为您解析这些参数。
示例
<?php namespace Package\Service class Service { public $router; public $logger; public function __construct(Router $router, Logger $logger) { $this->router = $router; $this->logger = $logger; } }
$capsule->make(\Package\Service::class)
使用制作进行绑定(解析)
如果有类,并且您想在不进行任何配置的情况下将其绑定到框架中,您可以这样做
$capsule->bind('service', Service::class)
如果 Capsule 看到这,它将使用 make 方法将 Service 绑定到容器中。这相当于执行以下操作
$capsule->bind('service', Service::class, function($capsule) { return $capsule->make(Service::class); });
如果您需要指定覆盖项,您可以指定第三个参数。
$capsule->bind('service', Service::class, ['string' => 'random'])
销毁
如果您需要销毁容器中的实例,可以使用 destroy 方法。
$capsule->destroy(mixed $name)
示例
$capsule->destroy('service') or $capsule->destroy(Service::class)
或者,您也可以使用以下语法
unset($capsule->service) or unset($capsule['service'])
贡献
此存储库接受贡献。查看 贡献指南。