本記事の範囲
本記事では、DI コンテナについて書きます。 サービスロケータは別記事で。
DI コンテナとは
DIを楽にしたり、オブジェクト生成のコードをまとめるための便利なツール
DI コンテナ の例
Main.php ( 1 ファイルに全部まとめました)
<?php
require_once './vendor/autoload.php';
use Pimple\Container;
class Service
{
public function log($message)
{
echo $message . "\n";
}
}
class Client
{
private $service;
public function __construct(Service $service)
{
$this->service = $service;
}
public function log($message)
{
$this->service->log($message);
}
}
$container = new Container();
$container['service_interface'] = function ($container) {
$service = new Service();
return $service;
};
$container['client'] = function ($container) {
$client = new Client($container['service_interface']);
return $client;
};
$client = $container['client'];
$client->log('ssssss');
今回は Pimple を使用して、依存性について定義しました。
これによって、呼び出し元で依存性の注入を直接記述しなくても良くなりました。
(Client に渡すクラスが インターフェースになったら、一工夫が必要そうです。)