phputil / di
Dependency Injection for PHP
0.3.1
2017-03-01 13:31 UTC
Requires
- php: >=5.4
Requires (Dev)
- phpunit/phpunit: >=4.0
README
Dependency Injection for PHP.
We use semantic version. See our releases.
Classes
Installation
composer require phputil/di
Example 1: automatic injection without configuring anything
class A {} class B {} class C { public $a, $b; function __construct( A $a, B $b ) { $this->a = $a; $this->b = $b; } } // Automatically creates "A" and "B", and inject them in "C" $c = DI::create( 'C' );
Example 2: configuring the injection for interfaces
interface MyInterface { function say( $what ); } class MyClass implements MyInterface { function say( $what ) { echo $what; } } // Configures "MyInterface" to be created using "MyClass" DI::config( DI::let( 'MyInterface' )->create( 'MyClass' ) ); $foo = DI::create( 'MyClass' ); // Create an instance of MyClass (no configuration required) $foo->say( 'hello' ); $bar = DI::create( 'MyInterface' ); // Create an instance of MyClass! $bar->say( 'world' );
Example 3: a more complex model
interface I {} class A {} class B implements I {} class C { public $i; function __construct( I $i ) { $this->i = $i; } } class X { public $a, $c; function __construct( A $a, C $c ) { $this->a = $a; $this->c = $c; } } // Configures "I" to be created using "B" DI::config( DI::let( 'I' )->create( 'B' ) ); // Automatically creates and injects "A" and "C", and // when creates "C", also injects "B" as "I". $x = DI::create( 'X' );
Example 4: passing constructor's arguments
class A { function __construct( $one, $two = 'world' ) { echo $one, ', ', $two; } } // Creates "A", passing constructor arguments as an array $a = DI::create( 'A', array( 'hello' ) ); // prints hello, world
Example 5: configuring shared instances
class A {} // Makes "A" a shared instance DI::config( DI::let( 'A' )->shared() ); $a1 = DI::create( 'A' ); $a2 = DI::create( 'A' ); var_dump( $a1 === $a2 ); // bool(true)
Example 6: configuring shared instances for interfaces
interface I {} class C implements I {} // Makes "I" a shared instance DI::config( DI::let( 'I' )->create( 'C' )->shared() ); $i1 = DI::create( 'I' ); $i2 = DI::create( 'I' ); var_dump( $i1 === $i2 ); // bool(true)
Example 7: defining a creation function
interface I {} class C implements I {} // Let you using a callable to create the desired instance DI::config( DI::let( 'I' )->call( function() { return new C(); } ) ); $i = DI::create( 'I' ); // Calls your function to create a "C" instance
Example 8: passing arguments for creation functions
class A { private $text; function __construct( $text ) { $this->text = $text; } } // Lets you customize a callable with parameters DI::config( DI::let( 'A' )->call( function( $a, $b ) { return new A( $a . $b ); } ) ); // Uses the customized constructor $a = DI::create( 'A', array( 'Hello, ', 'world' ) ); echo $a->text(); // Hello, world // Ignore the customized constructor passing true after the parameters $a2 = DI::create( 'A', array( 'Hi!' ), true ); echo $a2->text(); // Hi