Файл: ClassLoader-master/PositiveCode/ClassLoader.php
Строк: 55
<?php
/**
* PositiveCode Tools
*
* @author KpuTuK <bykputuk@ya.ru>
* @copyright Copyright (c) 2015-2016, PositiveCode Team
* @license MIT License
*/
namespace PositiveCode;
/**
* Автоматический загрузчик классов
* @author KpuTuK
* @version 1.0.0
* @package PositiveCode Tools
*/
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 PositiveCodeClassLoader
*/
public function withPath($class, $namespace)
{
$this->pathes[(string)$class] = (string)$namespace;
return $this;
}
/**
* Добавляет массив классов и пространств имен к ним
* @param array $pathes Массив классов и пространств имен к ним
* @return PositiveCodeClassLoader
*/
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'));
}
}