minphp/container

基于 Pimple 的依赖注入容器

2.1.0 2016-04-01 22:49 UTC

This package is auto-updated.

Last update: 2024-09-23 09:43:00 UTC


README

Build Status Coverage Status

一个符合 标准 的基于 Pimple 的容器。

安装

通过 composer 安装

composer require minphp/container:~2.0

基本用法

<?php
use Minphp\Container\Container;

$container = new Container();

// Add/Update
$container->set('queue', function($c) {
    return new \SplQueue();
});

// Verify
$queue_exists = $container->has('queue');

// Fetch
$queue = $container->get('queue');

// Remove
$container->remove('queue');

您也可以像 Pimple 一样将容器作为数组使用。尽管如此,使用定义的 ContainerInterface 方法更可取,因为它可以在需要时轻松切换到不同的容器。

<?php
use Minphp\Container\Container;

$container = new Container();
$container['queue'] = function($c) {
    return new \SplQueue();
};

$queue = $container['queue'];

ContainerInterface

interface ContainerInterface
{
    // inherited from Interop\Container\ContainerInterface
    public function get($id);

    // inherited from Interop\Container\ContainerInterface
    public function has($id);

    public function set($id, $value);

    public function remove($id);
}

ContainerAwareInterface

还提供了 ContainerAwareInterface,它允许您的类声明它们支持容器注入。对于授予对象对容器(你不会想使用静态类,对吧?)的访问权限非常有用。

interface ContainerAwareInterface
{
    public function setContainer(Minphp\Container\ContainerInterface $container = null);

    public function getContainer();
}

用法

<?php
namespace myApp\Controller;

use Minphp\Container\ContainerAwareInterface;
use Minphp\Container\ContainerInterface;

class MyController implements ContainerAwareInterface
{
    private $container = null;

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }

    public function getContainer()
    {
        return $this->container;
    }
}