Вход Регистрация
Файл: MobileCMS-2.7.0-beta/System/Kernel/ClassLoader.php
Строк: 70
<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace SystemKernel;

/**
 * Description of ClassLoader
 *
 * @author KpuTuK
 */
class ClassLoader
{
    
/**
     * Корневая директория классов
     * @var mixed
     */
    
protected $rootDir;
    
/**
     * Массив классов и пространств имен к ним
     * @var array
     */
    
protected $pathes = array();
    
/**
     * Конструктор класса
     * @param mixed $rootDir Корневая директория классов
     */
    
public function __construct($rootDir null){
        
$this->rootDir $rootDir;
    }
    
/**
     * Доавляет класс и пространство имен в массив
     * @param string $class
     * @param string $namespace
     * @return SystemKernelClassLoader
     */
    
public function withPath($class$namespace)
    {
        
$this->pathes[(string)$class] = (string)$namespace;
        return 
$this;
    }
    
/**
     * Добавляет массив классов и пространств имен к ним
     * @param array $pathes Массив классов и пространств имен к ним
     * @return SystemKernelClassLoader
     */
    
public function withPathes(array $pathes)
    {
        
$this->pathes array_merge($this->pathes$pathes);
        return 
$this;
    }
    
/**
     * Преоразует путь классу согласно пространству имен
     * @param string $class Преоразуемый класс
     * @return string Преобразованный класс
     */
    
protected function preparePath($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 Исключение выбрасываемое в случае отсутствия класса
     */
    
protected function getFilePath($class)
    {
        
$path $this->rootDir$this->preparePath($class);
        if (!
strstr($path'.php')) {
            
$path .= '.php';
        }
        
$file str_replace(['\'], DIRECTORY_SEPARATOR, $path);
        if (file_exists($file)) {
            return $file;
        } else {
            throw new ErrorException(sprintf('
Класс {"%s"не найден!', $file));
        }
    }
    /**
     * Подключает класс
     * @param string $class Подключаемый класс
     */
    protected function loadClass($class)
    {
        require_once $this->getFilePath($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'));
    }
    public function dumpClasses() {
        require_once ROOT .'
/System/Deprecated/ClassMapGenerator.php';
            SystemDeprecatedClassMapGenerator::dump(
                ROOT .'
modules', ROOT .'Application/Cache/map.php'
            );
    }
}
Онлайн: 1
Реклама