liuitt/fw-component-container

Liuitt 框架的容器组件。

dev-master / 1.0.x-dev 2016-02-26 17:46 UTC

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',
))