bulldog/container

v1.2.0 2018-08-12 23:27 UTC

README

Travis (.org) branch Coveralls github Packagist Packagist

Aka, the dog house. This container implements PSR-11 and ArrayAccess.

Installation

composer require bulldog/container

Usage

You should check to see if the container has an entry for that ID before you try to get that entry.

Key / Value

<?php
include 'vendor/autoload.php';

$container = new Bulldog\Container;

$value = $container->set('id', 'value');
echo $value;
// value

$result = $container->has('id');
var_dump($result);
// bool(true)

$value = $container->get('id');
echo $value;
// value

Key / Closure

If the value associated with the key is callable, then the container will call it for you, returning the contents of the closure. This allows you to lazy load classes or services.

<?php
include 'vendor/autoload.php';

$container = new Bulldog\Container;

class Example
{
    public function test()
    {
        echo 'it works!';
    }
    
}

// Using a closure
$container['service'] = function() {
    return new Example;
};

$service = $container['service'];
$service->test();
// it works!

// Storing an object (not lazy loaded)
$container['service'] = new Example;
$service = $container['service'];
$service->test();
// it works!

Dependency Injection Container

<?php

include 'vendor/autoload.php';

$container = new Bulldog\Container;

class Required 
{
    private $test = "Hello";
    
    public function getTest()
    {
        return $this->test;
    }
}

class Example
{
    private $required;
    
    public function __construct(Required $required)
    {
        $this->required = $required;
    }
    
    public function run()
    {
        echo $this->required->getTest();
    }
    
}
$container['required'] = function() {
    return new Required;
};

$container['example'] = function($c) {
    return new Example($c['required']);
};

$e = $container['example'];
$e->run();

Available Methods

Method Parameters Returns Exceptions
set $id, $value mixed ContainerException
has $id boolean ContainerException
get $id mixed ContainerException, NotFoundException

All parameters are required.

Users SHOULD NOT pass a container into an object so that the object can retrieve its own dependencies. Please refer to the Meta Document provided by PHP-FIG.

Contributing

All contributions welcome! Please first create an issue if something is wrong and let us know if you intend to fix it. Then fork the repo, create a new branch, and work on the issue. The branch name should be relevant to the issue.

Style

Run php-cs-fixer with the default rules.

php-cs-fixer fix ./src
php-cs-fixer fix ./tests