#php #namespace
Класс Autoload.php подключает в проект все имеющиеся .php-файлы. Не могу использовать пространство имен какого-либо файла, если он подключен через Autoload. Ручное подключение файла (используя require/include) и подключение его namespace работает без ошибок. Autoload.php:Ответы
Ответ 1
У вас $class_name передается как полное имя класса вместе с пространством имен. И вот на этом этапе $path = ROOT . $path . $class_name . '.php'; у вас получается что-то вроде ROOT.'/models/Admin\\Auth.php' А такого файла у вас скорее всего нетОтвет 2
можно еще так str_replace('\\', '/', __NAMESPACE__); , хотя в вашем случае нужно только короткое имя класса. Интересно что namespace обязательно должен присутствовать в файле класса, а доступ к нему производится или установкой пространства имен или указанием полного имени класса или имени класса относительно установленного пространства имен. Ниже загрузчик, код не мой, но я проверял он вполне рабочий. Нужно только загрузить сам загрузчик, выше него естественно указать желаемое пространство имен, и дальше уже работать непосредственно с классами и их функциями. Загрузчик AutoPSR-4.php test(); Z\Zed::test(); //расположен в models\Z\Zed.php \controllers\Xclass::test(); // расположен вне текущего пространства имен в controllers\Xclass.php Пример класса controllers\Xclass.php класс Xclass'; } }Ответ 3
Автозагрузчик composer`a. Подключение через композер, предполагает запихивание всего апликейшена в папку, связывание с именем проекта, а следовательно все неймспейсы приобрели дополнительный префикс \Проект, и стал выглядеть подобным образом \Проект\сабнеймспейс\класс, т.е. нужно для нормального функционирования, переименовывать во всех файлах проекта пространство имен, внедряя имя проекта, но чтобы не менять в глубинах кода используемые классы, можно добавить указатель на пространство имен use. Теперь в начале каждого класса пишем используемое пространство имён. У основных классов это:
Комментариев нет:
Отправить комментарий