2017 © Pedro PelΓ‘ez
 

library di

Yet another php dependency injection container

image

yetanother/di

Yet another php dependency injection container

  • Monday, July 29, 2013
  • by yetanother
  • Repository
  • 2 Watchers
  • 0 Stars
  • 5 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

PHP Dependency Injection Container

YetAnother DI β€” Π³ΠΈΠ±ΠΊΠΈΠΉ DI-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ экзСмпляры классов ΠΈ ΠΈΡ… зависимости Π½Π° основании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² конструктора класса. Π’Π°ΠΌ большС Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ, описания зависимостСй, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ сСрвисов, ΠΈΠ»ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ связях ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· конструкторов. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ популярных DI-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ c Singletone'Π°ΠΌΠΈ, Ρ‚.Π΅. с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ 1 Ρ€Π°Π·., (*1)

Установка

РСкомСндуСмая установка Ρ‡Π΅Ρ€Π΅Π· composer:, (*2)

{
    "require": {
        "yetanother/di": "dev-master"
    }
}

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

use YetAnother\DI\Container;

$container = new Container();

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

$myObject = $container->get('MyClass');
// ΠΈΠ»ΠΈ
$myObject = $container['MyClass'];

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ автоматичСски Π΅Π³ΠΎ сохраняСт. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ созданного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выполняСтся Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½Ρ†ΠΈΠ΅ΠΉ:, (*3)

$myObject = $container->get('MyClass');
// ΠΈΠ»ΠΈ
$myObject = $container['MyClass'];

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сущСствования

$container->has('MyClass'); // true/false
// ΠΈΠ»ΠΈ
isset($container['MyClass']);

Π ΡƒΡ‡Π½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

$myObject = new MyClass();
$container->push($myObject);
// ΠΈΠ»ΠΈ
$container[] = $myObject;

// послС добавлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ класса:
$container->get('MyClass') === $myObject; // true

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

$container->remove('MyClass');
// ΠΈΠ»ΠΈ
unset($container['MyClass']);

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с зависимостями

Допустим, класс MyModel зависит ΠΎΡ‚ класса Database, ΠΈ эта Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ описана Π² конструкторС:, (*4)

class MyModel
{
    private $db;

    public function __construct(Database $db)
    {
        $this->db = $db;
        echo 'MyModel created';
    }
}
class Database()
{
    public function __construct()
    {
        echo 'Database created';
    }
}

Π’ΠΎΠ³Π΄Π°, ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса MyModel, сначала Π±ΡƒΠ΄Π΅Ρ‚ создан ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Database:, (*5)

$myModel = $container->get('MyModel');
// Database created
// MyModel created

Но, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класа Database ΡƒΠΆΠ΅ создан ΠΈ хранится Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² конструктор MyModel, Ρ‚.Π΅. Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚:, (*6)

$db = $container->get('Database');
// Database created
$myModel = $container->get('MyModel');
// MyModel created

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ всС зависимости ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅., (*7)

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:, (*8)

$container->set('Database', function () {
    $db = new Database();
    $db->connect();
    return $db;
});
// ΠΈΠ»ΠΈ
$container['Database'] = function () {...};

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΈΡ… Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:, (*9)

$container->set('UserModel', function (Database $db, Session $session) {
    ...
});

Зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Наряду с Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сам ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² качСствС зависимости, Π½ΠΎ это Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ рСкомСндуСтся, Ρ‚.ΠΊ. ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ слоТно ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ связи ΠΌΠ΅ΠΆΠ΄Ρƒ классами, Π° Ρ‚Π°ΠΊΠΆΠ΅ услоТняСтся процСсс тСстирования., (*10)

class MyClass
{
    public function __construct(Container $container)
    {
        ...
    }
}
$container->set('MyClass', function (Container $container) {
    ...
});

The Versions

29/07 2013

dev-master

9999999-dev https://github.com/yetanotherphp/di

Yet another php dependency injection container

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

dependency injection container dic di