PHP code example of devanych / di-container

1. Go to this page and download the library: Download devanych/di-container library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

devanych / di-container example snippets


use Devanych\Di\Container;

$container = new Container();
// or with definitions array
$container = new Container($definitions);

/**
 * Sets definition to the container.
 *
 * @param string $id
 * @param mixed $definition
 */
$container->set($id, $definition);

/**
 * Sets multiple definitions at once; used in the constructor.
 *
 * @param array<string, mixed> $definitions
 */
$container->setMultiple($definitions);

/**
 * Returns 'true` if the dependency with this ID was sets, otherwise `false`.
 *
 * @param string $id
 * @return bool
 */
$container->has($id);

/**
 * Gets instance by definition from the container by ID.
 *
 * @param string $id
 * @return mixed
 * @throws Devanych\Di\Exception\NotFoundException If not found definition in the container.
 * @throws Devanych\Di\Exception\ContainerException If unable to create instance.
 */
$container->get($id);

/**
 * Always gets a new instance by definition from the container by ID.
 *
 * @param string $id
 * @return mixed
 * @throws Devanych\Di\Exception\NotFoundException If not found definition in the container.
 * @throws Devanych\Di\Exception\ContainerException If unable to create instance.
 */
$container->getNew($id);

/**
 * Gets original definition from the container by ID.
 *
 * @param string $id
 * @return mixed
 * @throws Devanych\Di\Exception\NotFoundException If not found definition in the container.
 */
$container->getDefinition($id);

// Set string
$container->set('string', 'value');
$container->get('string'); // 'value'

// Set integer
$container->set('integer', 5);
$container->get('integer'); // 5

// Set array
$container->set('array', [1,2,3]);
$container->get('array'); // [1,2,3]

// Set nested array
$container->set('nested', [
    'scalar' => [
        'integer' => 5,
        'float' => 3.7,
        'boolean' => false,
        'string' => 'string',
    ],
    'not_scalar' => [
        'closure' => fn() => null,
        'object' => new User(),
        'array' => ['array'],
    ],
]);

// Set object
$container->set('user', fn() => new User());
$container->get('user'); // User instance
// Or
$container->set('user', User::class);
$container->get('user');
// Or
$container->set(User::class, User::class);
$container->get(User::class);
// Or without setting via `set()`
$container->get(User::class);

/*
final class UserProfile
{
    private $name;
    private $age;

    public function __construct(string $name = 'John', int $age = 25)
    {
        $this->name = $name;
        $this->age = $age;
    }
}

final class User
{
    private $profile;

    public function __construct(UserProfile $profile)
    {
        $this->profile = $profile;
    }
}
*/

$container->set('user_name', 'Alexander');
$container->set('user_age', 40);

$container->set('user', function (\Psr\Container\ContainerInterface $container): User {
    $name = $container->get('user_name');
    $age = $container->get('user_age');
    $profile = new UserProfile($name, $age);
    return new User($profile);
});

$container->get('user');

// Or

$container->set(UserProfile::class, function (\Psr\Container\ContainerInterface $container): UserProfile {
    return new UserProfile($container->get('user_name'), $container->get('user_age'));
});

$container->get(User::class);

// Or with default values (`John` and `25`)

$container->get(User::class);

/*
final class UserProfileFactory implements \Devanych\Di\FactoryInterface
{
    public function create(\Psr\Container\ContainerInterface $container): UserProfile
    {
        return new UserProfile($container->get('user_name'), $container->get('user_age'));
    }
}
*/

$container->setMultiple([
    UserProfile::class => UserProfileFactory::class,
    // Or without autowiring
    // UserProfile::class => fn => UserProfileFactory(),
    // UserProfile::class => new UserProfileFactory(),
    'user_name' => 'Alexander',
    'user_age' => 40,
]);

$container->get(User::class); // User instance
$container->get(UserProfile::class); // UserProfile instance