liuitt/fw-component-container

The Liuitt Framework's Container Component.

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

This package is not auto-updated.

Last update: 2024-05-31 16:59:34 UTC


README

O Componente "Container" para o Framework Liuitt.

Este componente é utilizado para Injeção de Dependências de uma forma simples e prática.

Veja os exemplos a seguir para tirar suas conclusões!

Instalação via Composer

Para instalar este Componente via Composer, execute o comando:

composer require liuitt/fw-component-container --prefer-dist dev-master

IMPORTANTE Verifique se você precisa de permissão para utilizar o composer.

Utilização

Uma vez instalado, lembre-se de certificar se o Autoloader do Composer está incluído em seu script.

include 'vendor/autoload.php';

Exemplos

Para fins didáticos de ilustração, todos os exemplos documentados a seguir utilizam duas classes simples:

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()

Para utilizar basta instanciar o Componente Container sem passar argumentos para o Construtor:

use Liuitt\Component\Container;
$container = new Container();

Container::register(String $alias, Callback $callback)

Para registrar um objeto informe um "Alias" que será usado posteriormente para "resolver|recuperar" o objeto e uma Função Anônima:

$container->register('Celular', function(){
    return new Produto('Nokia 1520', 'Microsoft');
});

No exemplo acima, foi criado um Registro com o nome 'Celular', que retornará um objeto Produto com modelo Nokia 1520 e fabricante Microsoft.

Alternativamene você poderá utilizar chamadas estáticas:

Container::register('Tablet', function(){
    return new Produto('Asus Fonepad 7', 'Asus');
});

Container::resolve(String $alias)

Para resolver um Registro você deverá informar o nome registrado para o mesmo:

$celular = $container->resolve('Celular');

ou estaticamente:

$tablet = Container::resolve('Tablet');

Inspecionando as variáveis $celular e $tablet,

echo '<pre>';
echo var_export($celular, true) . PHP_EOL;
echo var_export($tablet, true) . PHP_EOL;

você deverá ver algo como:

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)

Permite passar argumentos no momento em que um Registro é resolvido. No entanto, estes DEVEM ser informados na Função Anônima no momento que algo é registrado.

Registrando com argumentos anonimamente

Container::register('Celulares', function($modelo, $fabricante){
    return new Produto($modelo, $fabricante);
});

Resolvendo com argumentos

$iphone = $container->resolveWith('Celulares', ['iPhone S6', 'Apple'])

ou estaticamente

$galaxy = Container::resolveWith('Celulares', ['Samsung Galaxy', 'Samsung']);

Inspecionando as variáveis $iphone e $galaxy,

echo var_export($iphone, true) . PHP_EOL;
echo var_export($galaxy, true) . PHP_EOL;

você deverá ver algo como:

Produto::__set_state(array(
   'modelo' => 'iPhone S6',
   'fabricante' => 'Apple',
))
Produto::__set_state(array(
   'modelo' => 'Samsung Galaxy',
   'fabricante' => 'Samsung',
))