spl_autoload_register();
, когда вызываемые без параметров просто регистрируют автозагрузчик по умолчанию, который не может обрабатывать пространства имен с макетом проекта. Вам нужно будет зарегистрировать свой собственный метод, чтобы он работал. Например:
spl_autoload_register('my_autoload');
И вот функция автозагрузки. Эта функция ожидает, что классы должны храниться таким образом, как:
/path/to/project/Namespace/Classname.php
/path/to/project/Namespace/Subnamespace/Classname.php
Вы можете назвать классы как \Namespaces\Classname
или старому стилю Namespace_Classname
:
function my_autoload ($classname) {
// if the class where already loaded. should not happen
if (class_exists($classname)) {
return true;
}
// Works for PEAR style class names and namespaced class names
$path = str_replace(
array('_', '\\'),
'/',
$classname
) . '.php';
if (file_exists('/path/to/project/' . $tail)) {
include_once 'path/to/project/' . $tail;
return true;
}
return false;
}
Заметим, что функция берется из моего GitHub пакет Jm_Autoloader
. Пакет предоставляет больше функциональности, поскольку несколько включают пути, префиксы пути и статическую автозагрузку (с предопределенным именем имени массива ассоциированного массива =>). Вы можете использовать его, если хотите;)