Pimple 是個實作 IoC 的 PHP 套件,它的特色就是非常簡單
使用 Composer 安裝
composer require pimple/pimple
Example
初始化
$container = new Pimple\Container();
|
儲存變數
$container['logger_driver'] = 'monolog';
|
單例模式 (每次取物件都會是同一個物件)
use Monolog\Logger;
$container['logger'] = function($container) { $log = new Logger('default'); return $log; };
$container['logger']->info('Hello world');
|
工廠模式 (每次取物件都會是新產生的物件)
use Monolog\Logger;
$container['logger'] = $container->factory(function($container) { $log = new Logger('default'); return $log; });
|
如果想要把 container 當作是 application 的參數時,建議用 protect + anonymous function。平常使用 ArrayAccess 設定的值,是有機會被覆蓋的。用這個方法可以避免被覆蓋。
Note: 看原始碼的感覺是這樣用的…
$container['db_settings'] = $container->protect(function () { return [ 'db_host' => '127.0.0.1', 'db_name' => 'default', 'db_user' => 'root', 'db_pass' => 'password', ]; });
var_dump($container['db_settings']);
|
Service Provider
class DbSettingProvider implements Pimple\ServiceProviderInterface { public function register(Pimple\Container $container) { $container['db_settings'] = $container->protect(function () { return [ 'db_host' => '127.0.0.1', 'db_name' => 'default', 'db_user' => 'root', 'db_pass' => 'password', ]; }); } } $container->register(new DbSettingProvider());
var_dump($container['db_settings']);
|