liuitt / fw-component-container
The Liuitt Framework's Container Component.
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: ~5.2
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',
))