本文的示例代码参考IoC02
目录
开始
composer require "laravel/framework:5.5.*"
Basic
vim basic.php
<?php
require __DIR__.'/vendor/autoload.php';
interface Logger
{
public function debug($message);
}
class ConsoleLogger implements Logger
{
public function debug($message)
{
echo '[console] debug: '.$message;
}
}
$container = new Illuminate\Container\Container();
$container->bind(Logger::class, ConsoleLogger::class);
$instance = $container->make(Logger::class);
$instance->debug('hello container');
- 测试
php basic.php
[console] debug: hello container
Dependency Injection
vim di.php
<?php
require __DIR__.'/vendor/autoload.php';
interface Logger
{
public function debug($message);
}
class ConsoleLogger implements Logger
{
public function debug($message)
{
echo '[console] debug: '.$message;
}
}
class IndexController
{
public $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function get($url)
{
$this->logger->debug($url);
}
}
$container = new Illuminate\Container\Container();
$container->bind(Logger::class, ConsoleLogger::class);
$container->singleton(IndexController::class);
$instance = $container->make(IndexController::class);
$instance->get('/index');
- 测试
php di.php
[console] debug: /index
When
vim when.php
<?php
require __DIR__.'/vendor/autoload.php';
interface Logger
{
public function debug($message);
}
class ConsoleLogger implements Logger
{
public function debug($message)
{
echo '[console] debug: '.$message;
}
}
class FileLogger implements Logger
{
public function debug($message)
{
echo '[file] debug: '.$message;
}
}
class IndexController
{
public $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function get($url)
{
$this->logger->debug($url);
}
}
class AnotherController
{
public $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function get($url)
{
$this->logger->debug($url);
}
}
$container = new Illuminate\Container\Container();
$container->when(IndexController::class)
->needs(Logger::class)
->give(ConsoleLogger::class);
$container->when(AnotherController::class)
->needs(Logger::class)
->give(function () {
return new FileLogger();
});
$container->singleton(IndexController::class);
$container->singleton(IndexController::class);
$instance1 = $container->make(IndexController::class);
$instance1->get('/index');
echo "\n--------------------\n";
$instance2 = $container->make(AnotherController::class);
$instance2->get('/index');
- 测试
php when.php
[console] debug: /index
--------------------
[file] debug: /index
网友评论