Как уже упоминалось, Паскаль MARTIN, вы должны заменить '\' на DIRECTORY_SEPARATOR, например:
$filename = BASE_PATH . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
include($filename);
Также я бы предложил вам реорганизовать структуру директории, чтобы сделать код более читабельным. Это может быть альтернативой:
Структура каталогов:
ProjectRoot
|- lib
Файл: /ProjectRoot/lib/Person/Barnes/David/Class1.php
<?php
namespace Person\Barnes\David
class Class1
{
public function __construct()
{
echo __CLASS__;
}
}
?>
- Создайте подкаталог для каждого пространства имен, которое вы определили.
Файл: /ProjectRoot/test.php
define('BASE_PATH', realpath(dirname(__FILE__)));
function my_autoloader($class)
{
$filename = BASE_PATH . '/lib/' . str_replace('\\', '/', $class) . '.php';
include($filename);
}
spl_autoload_register('my_autoloader');
use Person\Barnes\David as MyPerson;
$class = new MyPerson\Class1();
- Я использовал рекомендацию php 5 для объявления автозагрузчика. Если вы все еще используете PHP 4, замените его старым синтаксисом: function __autoload ($ class)