PHP-классы с пространством имен не могут быть загружены через spl_autoload_register?

У меня проблема с загрузкой классов с помощью spl_autoload_register когда пространство имен реализовано в классе.

autoloader класса ниже, но у меня нет проблем с загрузкой какого-либо класса, когда пространство имен не используется,

 class autoloader { /** * Set the property. */ public $directory; public $recursive; /** * Receive the supplied data. * @string $directory * @array $recursive default: models */ public function __construct($directory, $recursive = array('search' => 'models') ) { # Store the data into the property. $this->directory = $directory; $this->recursive = $recursive; # When using spl_autoload_register() with class methods, it might seem that it can use only public methods, though it can use private/protected methods as well, if registered from inside the class: spl_autoload_register(array($this,'get_class')); } private function get_class($class_name) { # List all the class directories in the array. if ($this->recursive) { $array_directories = self::get_recursive_directory($this->directory); } else { if (is_array($this->directory)) $array_directories = $this->directory; else $array_directories = array($this->directory); } # Set the class file name. $file_name = 'class_'.strtolower($class_name).'.php'; # Loop the array. foreach($array_directories as $path_directory) { if(file_exists($path_directory.$file_name)) { # There is no need to use include/require_once. Autoload is a fallback when the system can't find the class you are instantiating. # If you've already included it once via an autoload then the system knows about it and won't run your autoload method again anyway. # So, just use the regular include/require - they are faster. include $path_directory.$file_name; } } } # However the memory consumption of this can be huge if you have a very large directory tree with only a few matches. # @source: http://stackoverflow.com/questions/9294543/search-and-list-specific-directories-only public function get_recursive_directory($directory) { # Create an object that allows us to iterate directories recursively. # Stolen from here: # http://www.php.net/manual/en/class.recursivedirectoryiterator.php#102587 $iterator = new RecursiveIteratorIterator ( new RecursiveDirectoryIterator($directory), RecursiveIteratorIterator::CHILD_FIRST ); # This will hold the result. $result = array(); # Loop the directory contents. foreach ($iterator as $path) { # If object is a directory and matches the search term ('models')... if ($path->isDir() && $path->getBasename() === $this->recursive['search']) { # Add it to the result array. # Must replace the slash in the class - dunno why! $result[] = str_replace('\\', '/', $path).'/'; //$result[] = (string) $path . '/'; } } # Return the result in an array. return $result; } } 

например, класс tag ,

 namespace hello; class tag extends \core { } 

теперь загрузите класс через класс autoloader ,

 # Autoload the classes from the specific folder. $autoloader = new autoloader("C:/wamp/www/website/local/applications/master/sides/models/", $recursive = false); # Instantiate the tag. $tag = new hello\tag($connection); 

результат,

Неустранимая ошибка : класс 'hello \ tag' не найден в C: \ wamp \ www \ website \ local \ applications \ master \ sides \ views \ tags.php в строке 7

Любая идея, как я могу исправить свой класс autoloader чтобы я мог загружать классы, есть ли пространство имен или нет?

РЕДАКТИРОВАТЬ:

В папке, где хранятся классы и имена классов,

 C:\wamp\www\website\local\applications\master\sides\models\ class_tag.php class_something.php 

Ваша ошибка в get_class() . $class_name содержит полное имя класса с его пространством имен. В вашем случае вам нужно удалить пространство имен из своего имени класса.

 $file_name = 'class_'.strtolower(array_pop(explode('\\', $class_name))).'.php'; 

Я настоятельно рекомендую использовать стандарт PSR-0 для автозагрузки. Если вы будете использовать какие-либо библиотеки, очень вероятно, что они используют один и тот же стандарт, и у вас есть только один автозагрузчик.