liuitt/ fw-component-container
Liuitt 框架的容器组件。
dev-master / 1.0.x-dev
2016-02-26 17:46 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: ~5.2
This package is not auto-updated.
Last update: 2024-09-20 18:18:35 UTC
README
Liuitt 框架的 "Container" 组件。
此组件用于以简单和实用的方式注入依赖。
查看以下示例以得出自己的结论!
通过 Composer 安装
要通过 Composer 安装此组件,请执行以下命令
composer require liuitt/fw-component-container --prefer-dist dev-master
重要 请检查您是否需要使用 composer 的权限。
使用
安装完成后,请确保 Composer 的 Autoloader 已包含在您的脚本中。
include 'vendor/autoload.php';
示例
为了教学目的,以下所有示例都使用了两个简单的类
class Produto { private $modelo; private $fabricante; public function __construct($modelo, $fabricante) { $this->modelo = $modelo; $this->fabricante = $fabricante; } } class Carrinho { private $produto; public function __construct(Produto $produto) { echo var_export($produto, true); } }
Container::__construct()
要使用它,只需实例化 Container 组件,不向构造函数传递任何参数
use Liuitt\Component\Container; $container = new Container();
Container::register(String $alias, Callback $callback)
要注册一个对象,请提供一个将要用于后续 "解析|检索" 对象的 "别名" 和一个匿名函数
$container->register('Celular', function(){ return new Produto('Nokia 1520', 'Microsoft'); });
在上面的示例中,创建了一个名为 'Celular' 的 注册,它将返回一个具有型号 Nokia 1520 和制造商 Microsoft 的 产品 对象。
或者您可以使用静态调用
Container::register('Tablet', function(){ return new Produto('Asus Fonepad 7', 'Asus'); });
Container::resolve(String $alias)
要解析一个注册项,您需要提供注册项的名称
$celular = $container->resolve('Celular');
或者静态地
$tablet = Container::resolve('Tablet');
检查变量 $celular 和 $tablet,
echo '<pre>'; echo var_export($celular, true) . PHP_EOL; echo var_export($tablet, true) . PHP_EOL;
您应该看到以下内容
Produto::__set_state(array(
'modelo' => 'Nokia 1520',
'fabricante' => 'Microsoft',
))
Produto::__set_state(array(
'modelo' => 'Asus Fonepad 7',
'fabricante' => 'Asus',
))
Container::resolveWith(String $alias, Array $args)
允许在解析注册项时传递参数。但是,这些参数必须在注册时在匿名函数中提供。
匿名参数注册
Container::register('Celulares', function($modelo, $fabricante){ return new Produto($modelo, $fabricante); });
带参数解析
$iphone = $container->resolveWith('Celulares', ['iPhone S6', 'Apple'])
或者静态地
$galaxy = Container::resolveWith('Celulares', ['Samsung Galaxy', 'Samsung']);
检查变量 $iphone 和 $galaxy,
echo var_export($iphone, true) . PHP_EOL; echo var_export($galaxy, true) . PHP_EOL;
您应该看到以下内容
Produto::__set_state(array(
'modelo' => 'iPhone S6',
'fabricante' => 'Apple',
))
Produto::__set_state(array(
'modelo' => 'Samsung Galaxy',
'fabricante' => 'Samsung',
))