Файл: concrete5.7.5.6/concrete/src/Foundation/ModifiedPsr4ClassLoader.php
Строк: 75
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace ConcreteCoreFoundation;
/**
* A PSR-4 compatible class loader.
*
* See http://www.php-fig.org/psr/psr-4/
*
* @author Alexander M. Turek <me@derrabus.de>
*/
class ModifiedPsr4ClassLoader
{
/**
* @var array
*/
private $prefixes = array();
/**
* @param string $prefix
* @param string $baseDir
*/
public function addPrefix($prefix, $baseDir)
{
$prefix = trim($prefix, '\').'\';
$baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
$this->prefixes[] = array($prefix, $baseDir);
}
/**
* @param string $class
*
* @return string|null
*/
public function findFile($class)
{
$class = ltrim($class, '\');
foreach ($this->prefixes as $current) {
list($currentPrefix, $currentBaseDir) = $current;
if (0 === strpos($class, $currentPrefix)) {
$classWithoutPrefix = substr($class, strlen($currentPrefix));
$file = $currentBaseDir . str_replace('\', DIRECTORY_SEPARATOR, $classWithoutPrefix) . '.php';
if (file_exists($file)) {
return $file;
}
/* concrete5 Modification */
$file = '';
$segments = explode('\', $classWithoutPrefix);
foreach($segments as $segment) {
$file .= DIRECTORY_SEPARATOR;
$segment = lcfirst($segment);
$chunks = preg_split('/(?=[A-Z])/', $segment);
for ($i = 0; $i < count($chunks); $i++) {
$file .= strtolower($chunks[$i]);
if (($i+1) < count($chunks)) {
$file .= '_';
}
}
}
$file = ltrim($file, '/') . '.php';
$file = $currentBaseDir . $file;
if (file_exists($file)) {
return $file;
}
}
}
}
/**
* @param string $class
*
* @return Boolean
*/
public function loadClass($class)
{
$file = $this->findFile($class);
if (null !== $file) {
require $file;
return true;
}
return false;
}
/**
* Registers this instance as an autoloader.
*
* @param Boolean $prepend
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
}
/**
* Removes this instance from the registered autoloaders.
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
}
}