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

/**
 * Автоматический загрузчик классов
 * @author KpuTuK
 * @version 1.0.0
 * @package Neiron framework
 * @category Kernel
 * @link
 */
class ClassLoader
{
    
/**
     * Корневая директория классов
     * @var mixed
     */
    
private $rootDir;
    
/**
     * Массив классов и пространств имен к ним
     * @var array
     */
    
private $pathes = array();
    
/**
     * Конструктор класса
     * @param mixed $rootDir Корневая директория классов
     */
    
public function __construct($rootDir null)
    {
        
$this->rootDir $rootDir;
    }
    
/**
     * Доавляет класс и пространство имен в массив
     * @param string $class
     * @param string $namespace
     */
    
public function addPath($class$namespace)
    {
        
$this->pathes[(string) $class] = (string) $namespace;
    }
    
/**
     * Добавляет класс и генерирует путь к нему согласно psr0
     * @deprecated Данный способ по состоянию на 21 октября 2014 года PSR-0 был помечен как устаревший
     * @param sring $class Имя класса
     */
    
public function addPathPsr0($class)
    {
        
$this->pathes[$class] = strtr($class'_''/');
    }
    
/**
     * Добавляет массив классов и пространств имен к ним
     * @param array $pathes Массив классов и пространств имен к ним
     */
    
public function addPathes(array $pathes)
    {
        
$this->pathes array_merge($this->patches$pathes);
    }
    
/**
     * Преоразует путь классу согласно пространству имен
     * @param string $class Преоразуемый класс
     * @return string Преобразованный класс
     */
    
private function preparePatch($class)
    {
        if (
count($this->pathes) !== 0) {
            
$class str_replace(
                    
array_keys($this->pathes), array_values($this->pathes), $class
            
);
        }
        return 
$class;
    }
    
/**
     * Возвращает полный путь к классу
     * @param string $class Искомый класс
     * @return string Полный путь к классу
     * @throws ErrorException Исключение выбрасываемое в случае отсутствия класса
     */
    
private function getFilePatch($class)
    {
        
$path $this->rootDir $this->preparePatch($class) . '.php';
        
$file str_replace('/'DIRECTORY_SEPARATOR$path);
        if (
file_exists($file)) {
            return 
$file;
        } else {
            throw new 
ErrorException(sprintf('Класс {"%s"} не найден!'$file));
        }
    }
    
/**
     * Подключает класс
     * @param string $class Подключаемый класс
     */
    
public function loadClass($class)
    {
        require_once 
$this->getFilePatch($class);
    }
    
/**
     * Регистрирует автозагрузчк классов
     * @param booleran $prepend 
     */
    
public function register($prepend false)
    {
        
spl_autoload_register(array($this'loadClass'), false$prepend);
    }
    
/**
     * Удаляет автозагрузчик классов
     */
    
public function unregister()
    {
        
spl_autoload_unregister(array($this'loadClass'));
    }
}
Онлайн: 1
Реклама