Я хочу автозагрузку использовать пространство имен в моих классах, но я получаю сообщение об ошибке в index.phpПространство имен и ошибка автозагрузки, как правильно использовать пространства имен PHP с автозагрузкой?
Error: Fatal error: Class 'foo\B' not found ...
Пример:
каталоги скелет:
\var\www
|_ foo
| |_ A.php
| |_ B.php
|
|_ view
| |_ index.php
A.php
<?php
namespace foo;
class A {
private $a;
public function __construct($a) {
$this->a = $a;
}
}
B.php
<?php
namespace foo;
use foo\A;
class B extends A {
private $b;
public function __construct($a, $b) {
parent::__construct($a);
$this->b = $b;
}
}
И Index.php
<?php
use foo\B;
define('ROOT', __DIR__ . DIRECTORY_SEPARATOR);
$b = new B('s', 2);
function __autoload($classname) {
$namespace = substr($classname, 0, strrpos($classname, '\\'));
$namespace = str_replace('\\', DIRECTORY_SEPARATOR, $classname);
$classPath = ROOT . str_replace('\\', '/', $namespace) . '.php';
if(is_readable($classPath)) {
require_once $classPath;
}
}
Этот вопрос почти так же, как этот: PHP autoload namespace, но я включаю index.php в другой папке и не работает.
Если я поместил тот же проект, но со скелетом следующих каталогов, я не получаю никаких ошибок.
\var\www
|_ foo
| |_ A.php
| |_ B.php
|
|_ index.php
вопрос: почему, если я ставлю index.php в папке не работает?
Благодаря