Эй, я только учусь, как работают пространства имен и автозагрузка. Кажется, не могу заставить его работать, может использовать некоторую помощь. Я использую codeigniter и соответствующая структура каталогов:
root/
application/
classes/
testa/
TestClass.php
testb/
UserClass.php
html/
index.php
содержимое TestClass.php равно
namespace application\classes\testa;
class TestClass {
public $var = 'a default value';
public function displayVar() {
echo $this->var;
}
}
Я пытаюсь автозагрузить содержимое таким образом, чтобы оно работало с любой структурой каталогов внутри папки классов, например, в index.php (я нашел этот код в сети)
// autoload classes based on a 1:1 mapping from namespace to directory
// structure.
spl_autoload_register(function ($className) {
# Usually I would just concatenate directly to $file variable
# below
# this is just for easy viewing on Stack Overflow)
$ds = DIRECTORY_SEPARATOR;
$dir = __DIR__;
// replace namespace separator with directory separator (prolly
// not required)
$className = str_replace('\\', $ds, $className);
// get full name of file containing the required class
$file = "{$dir}{$ds}{$className}.php";
// get file if it is readable
if (is_readable($file)) require_once $file;
});
Но когда я пытаюсь создать экземпляр класса в представлении codeigniter с помощью
$obj = new application\classes\testa\TestClass();
Я получаю
An uncaught Exception was encountered
Type: Error
Message: Class 'application\classes\testa\TestClass' not found
Что я делаю не так? Я никогда раньше не использовал пространства имен или классы, так что я немного растерялся. Я думаю, что автозагрузчик написан неправильно (может быть, для машины Windows?), Но я не уверен. Спасибо за вашу помощь.