Почему сlass_exists не находит класс, подключенный autoloading'ом composer?
Собственно, сабж.
class_exists('MyClass'); возвращает false. Зато если прописать полное имя класса class_exists('App\Classes\MyClass');, то все находится.
Уже несколько часов читаю литературу по пространствам имен и конкретно автозагрузчику, но так и не понял, почему функция поиска короткое имя класса не понимает, а полное понимает. Объяснит кто-нибудь?)
namespace Bicycle\Kernel;
use App\Controllers\Reviews;
public static function dispatch($url)
{
if (self::matchRoute($url)) { # если есть совпадения
$controller = self::$currentRoute['controller']; # берем значение контроллера
if (class_exists($controller)) { # если есть класс контроллер
echo 'OK'; # тогда его нужно подключить
} else {
echo 'ERR'; # иначе ошибка
}
}
}
Еще раз повторю, что класс, который ищу, существует.
Автозагрузка тут ни при чём, просто class_exists ожидает получить полный путь до класса вместе с пространством имён, алиасы текущего файла она не понимает.
Вам нужно руками в проверку добавить пространство имён.
Я понял. Но остались сомнения.
Мануал говорит, что подключение класса через директиву use никак не связано с файловой системой, и этот "путь" не путь в файловой системе, а "путь" в автозагрузчике, которые уже ссылается на настоящий путь в системе через автозагрузчик. А раз проверка принимает виртуальный путь автозагрузчика, то почему она не принимает короткий алиас, который потом можно преобразовать в длинный и найти этот класс в пространстве имен?