Вход Регистрация
Файл: Neiron/Kernel/DIContainer.php
Строк: 105
<?php
/**
 * PHP 5x framework с открытым иходным кодом
 */
namespace NeironKernel;

use 
NeironAPIKernelDIContainerInterface;

/**
 * Dependency injection Контейнер
 * @author KpuTuK
 * @version 1.0.0
 * @package Neiron framework
 * @category Kernel
 * @link
 */
class DIContainer implements DIContainerInterface
{
    
/**
     * Контейнер
     * @var array
     */
    
private $container = array();
    
/**
     * Конструктор класса
     * @param array $values 
     */
    
public function __construct(array $values = array())
    {
        foreach (
$values as $offset => $value) {
            
$this->offsetSet($offset$value);
        }
    }
    
/**
     * Создает функцию при вызове которой каждый раз будет вызван конструктор класса
     * @param string $name Имя функции
     * @param mixed $class Пространство имен или обьект класса
     */
    
public function setInstance($name$class)
    {
        
$this->offsetSet($name, function ($values) use ($class) {
            if (
is_object($class)) {
                return (new 
ReflectionObject($class))->newInstance($values);
            }
            return new 
$class($values);
        });
    }
    
/**
     * Меняет содержимое в контейнере по ключу
     * @param string $name
     * @param mixed $value
     */
    
public function rewind($name$value)
    {
        
$this->offsetUnset($name);
        
$this->offsetSet($name$value);
    }
    
/**
     * Проверяет наличие параметра в контейнере
     * @param string $offset Проверяемый параметр
     * @return bool true параметр найден или false если параметр отсутсвует
     */
    
public function offsetExists($offset)
    {
        return 
array_key_exists($offset$this->container);
    }
    
/**
     * Сохраняет содержимое в контейнер по ключу
     * @param string $offset Ключ
     * @param mixed $value Сохраняемое содержимое
     * @throws InvalidArgumentException Исключение выбрасываемое в случае если ключ уже существует в контейнере
     */
    
public function offsetSet($offset$value)
    {
        if (
$this->offsetExists($offset)) {
            throw new 
InvalidArgumentException(
            
sprintf('Параметр "%s" уже существует!'$offset)
            );
        }
        
$this->container[$offset] = $value;
    }
    
/**
     * Возвращает содержимое контейнера по ключу
     * @param string $offset Ключ содержимого
     * @return mixed Содержимое
     * @throws InvalidArgumentException Исключение выбрасываемое в случае отсутствия ключа в контейнере
     */
    
public function offsetGet($offset)
    {
        if (!
$this->offsetExists($offset)) {
            throw new 
InvalidArgumentException(
            
sprintf('Параметр "%s" не существует!'$offset)
            );
        }
        return 
$this->container[$offset];
    }
    
/**
     * Удаляет содержимое по ключу в контейнере
     * @param string $offset Ключ содержимого
     * @throws InvalidArgumentException Исключение выбрасываемое в случае отсутствия ключа в контейнере
     */
    
public function offsetUnset($offset)
    {
        if (!
$this->offsetExists($offset)) {
            throw new 
InvalidArgumentException(
            
sprintf('Параметр "%s" не существует!'$offset)
            );
        }
        unset(
$this->container[$offset]);
    }
}
Онлайн: 1
Реклама