PHP code example of gandung / dependency-injection
1. Go to this page and download the library: Download gandung/dependency-injection 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/ */
gandung / dependency-injection example snippets
namespace Unused;
class Foo
{
/**
* @var \SplPriorityQueue
*/
private $heap;
public function __construct(\SplPriorityQueue $heap)
{
$this->heap = $heap;
}
}
namespace Unused;
class Bar
{
/**
* @var Foo
*/
private $foo;
public function __construct(Foo $foo)
{
$this->foo = $foo;
}
}
use Unused\Bar;
$container = new Container();
$bar = $container->make(Bar::class);
use Unused\Bar;
use Unused\Foo;
$container = new Container();
$container->bind(Bar::class, Foo::class);
$bar = $container->make(Bar::class);
use Unused\Bar;
use Unused\Foo;
$container = new Container();
$container->bind(Bar::class, function($container) {
return $container->make(Foo::class);
});
$bar = $container->make(Bar::class);
use Unused\Base;
use Unused\BaseInterface;
$container = new Container();
$container->singleton(BaseInterface::class, Base::class);
$base = $container->make(BaseInterface::class);
use Unused\Base;
use Unused\BaseInterface;
$container = new Container();
$container->singleton(BaseInterface::class, function($container) {
return $container->make(Base::class);
});
$base = $container->make(BaseInterface::class);
namespace Unused;
interface BaseInterface
{
public function setFirstName($firstName);
public function setMiddleName($middleName);
public function setLastName($lastName);
}
namespace Unused;
class Base implements BaseInterface
{
/**
* @var string
*/
private $firstName;
/**
* @var string
*/
private $middleName;
/**
* @var string
*/
private $lastName;
public function setFirstName($firstName)
{
$this->firstName = $firstName;
}
public function setMiddleName($middleName)
{
$this->middleName = $middleName;
}
public function setLastName($lastName)
{
$this->lastName = $lastName;
}
}
namespace Unused;
class Foo
{
/**
* @var BaseInterface
*/
private $base;
public function __construct(BaseInterface $base)
{
$this->base = $base;
}
}
use Unused\BaseInterface;
use Unused\Base;
use Unused\Foo;
$container = new Container();
$container->bind(BaseInterface::class, Base::class);
$foo = $container->make(Foo::class);
use Unused\BaseInterface;
use Unused\Base;
use Unused\Foo;
$container = new Container();
$container->bind(BaseInterface::class, function($container) {
return $container->make(Base::class);
});
$foo = $container->make(Foo::class);
namespace Unused;
interface BaseInterface
{
public function setFirstName($firstName);
public function setMiddleName($middleName);
public function setLastName($lastName);
}
namespace Unused;
class Base implements BaseInterface
{
/**
* @var string
*/
private $firstName;
/**
* @var string
*/
private $middleName;
/**
* @var string
*/
private $lastName;
/**
* @implements
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
}
/**
* @implements
*/
public function setMiddleName($middleName)
{
$this->middleName = $middleName;
}
/**
* @implements
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
}
}
use Unused\Base;
use Unused\BaseInterface;
$container = new Container();
// with direct class name.
$container->bind(BaseInterface::class, Base::class);
// or, use a closure.
$container->bind(BaseInterface::class, function($container) {
return $container->make(Base::class);
});
$base = $container->make(BaseInterface::class);
namespace Unused;
class FooService
{
/**
* @var BaseInterface
*/
private $base;
public function __construct(BaseInterface $base)
{
$this->base = $base;
}
}