dev-master
9999999-dev https://github.com/yetanotherphp/diYet another php dependency injection container
MIT
The Requires
- php >=5.3.0
dependency injection container dic di
Wallogit.com
2017 © Pedro PelΓ‘ez
Yet another 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) {
...
});
Yet another php dependency injection container
MIT
dependency injection container dic di