Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\ClassLoader; Chris@0: Chris@0: /** Chris@0: * A PSR-4 compatible class loader. Chris@0: * Chris@0: * See http://www.php-fig.org/psr/psr-4/ Chris@0: * Chris@0: * @author Alexander M. Turek Chris@0: */ Chris@0: class Psr4ClassLoader Chris@0: { Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: private $prefixes = array(); Chris@0: Chris@0: /** Chris@0: * @param string $prefix Chris@0: * @param string $baseDir Chris@0: */ Chris@0: public function addPrefix($prefix, $baseDir) Chris@0: { Chris@0: $prefix = trim($prefix, '\\').'\\'; Chris@0: $baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; Chris@0: $this->prefixes[] = array($prefix, $baseDir); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @param string $class Chris@0: * Chris@0: * @return string|null Chris@0: */ Chris@0: public function findFile($class) Chris@0: { Chris@0: $class = ltrim($class, '\\'); Chris@0: Chris@0: foreach ($this->prefixes as list($currentPrefix, $currentBaseDir)) { Chris@0: if (0 === strpos($class, $currentPrefix)) { Chris@0: $classWithoutPrefix = substr($class, strlen($currentPrefix)); Chris@0: $file = $currentBaseDir.str_replace('\\', DIRECTORY_SEPARATOR, $classWithoutPrefix).'.php'; Chris@0: if (file_exists($file)) { Chris@0: return $file; Chris@0: } Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * @param string $class Chris@0: * Chris@0: * @return bool Chris@0: */ Chris@0: public function loadClass($class) Chris@0: { Chris@0: $file = $this->findFile($class); Chris@0: if (null !== $file) { Chris@0: require $file; Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: return false; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Registers this instance as an autoloader. Chris@0: * Chris@0: * @param bool $prepend Chris@0: */ Chris@0: public function register($prepend = false) Chris@0: { Chris@0: spl_autoload_register(array($this, 'loadClass'), true, $prepend); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Removes this instance from the registered autoloaders. Chris@0: */ Chris@0: public function unregister() Chris@0: { Chris@0: spl_autoload_unregister(array($this, 'loadClass')); Chris@0: } Chris@0: }