Файл: 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'));
}
}