123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- <?php
-
-
- namespace Doctrine\Common;
-
-
- class ClassLoader
- {
- private $fileExtension = '.php';
- private $namespace;
- private $includePath;
- private $namespaceSeparator = '\\';
-
-
-
- public function __construct($ns = null, $includePath = null)
- {
- $this->namespace = $ns;
- $this->includePath = $includePath;
- }
-
-
-
- public function setNamespaceSeparator($sep)
- {
- $this->namespaceSeparator = $sep;
- }
-
-
-
- public function getNamespaceSeparator()
- {
- return $this->namespaceSeparator;
- }
-
-
-
- public function setIncludePath($includePath)
- {
- $this->includePath = $includePath;
- }
-
-
-
- public function getIncludePath()
- {
- return $this->includePath;
- }
-
-
-
- public function setFileExtension($fileExtension)
- {
- $this->fileExtension = $fileExtension;
- }
-
-
-
- public function getFileExtension()
- {
- return $this->fileExtension;
- }
-
-
-
- public function register()
- {
- spl_autoload_register(array($this, 'loadClass'));
- }
-
-
-
- public function unregister()
- {
- spl_autoload_unregister(array($this, 'loadClass'));
- }
-
-
-
- public function loadClass($className)
- {
- if ($this->namespace !== null && strpos($className, $this->namespace.$this->namespaceSeparator) !== 0) {
- return false;
- }
-
- require ($this->includePath !== null ? $this->includePath . DIRECTORY_SEPARATOR : '')
- . str_replace($this->namespaceSeparator, DIRECTORY_SEPARATOR, $className)
- . $this->fileExtension;
-
- return true;
- }
-
-
-
- public function canLoadClass($className)
- {
- if ($this->namespace !== null && strpos($className, $this->namespace.$this->namespaceSeparator) !== 0) {
- return false;
- }
-
- $file = str_replace($this->namespaceSeparator, DIRECTORY_SEPARATOR, $className) . $this->fileExtension;
-
- if ($this->includePath !== null) {
- return file_exists($this->includePath . DIRECTORY_SEPARATOR . $file);
- }
-
- return self::fileExistsInIncludePath($file);
- }
-
-
-
- public static function classExists($className)
- {
- if (class_exists($className, false)) {
- return true;
- }
-
- foreach (spl_autoload_functions() as $loader) {
- if (is_array($loader)) {
- if (is_object($loader[0])) {
- if ($loader[0] instanceof ClassLoader) {
- if ($loader[0]->canLoadClass($className)) {
- return true;
- }
- } else if ($loader[0]->{$loader[1]}($className)) {
- return true;
- }
- } else if ($loader[0]::$loader[1]($className)) {
- return true;
- }
- } else if ($loader instanceof \Closure) {
- if ($loader($className)) {
- return true;
- }
- } else if (is_string($loader) && $loader($className)) {
- return true;
- }
- }
-
- return false;
- }
-
-
-
- public static function getClassLoader($className)
- {
- foreach (spl_autoload_functions() as $loader) {
- if (is_array($loader)
- && $loader[0] instanceof ClassLoader
- && $loader[0]->canLoadClass($className)
- ) {
- return $loader[0];
- }
- }
-
- return null;
- }
-
-
-
- public static function fileExistsInIncludePath($file)
- {
- foreach (explode(PATH_SEPARATOR, get_include_path()) as $dir) {
- if (file_exists($dir . DIRECTORY_SEPARATOR . $file)) {
- return true;
- }
- }
- return false;
- }
- }
|