Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

Не могу подключить namespace используя autoload

Класс Autoload.php подключает в проект все имеющиеся .php-файлы. Не могу использовать пространство имен какого-либо файла, если он подключен через Autoload.
Ручное подключение файла (используя require/include) и подключение его namespace работает без ошибок.
Autoload.php:
/** * Подключает все имеющиеся файлы в папках $array_paths[] */
function __autoload($class_name) { $array_paths = array( '/models/', '/components/', '/controllers/', );
foreach ($array_paths as $path) { $path = ROOT . $path . $class_name . '.php';
if (is_file($path)) { include_once $path; } } }
Authorize.php:
class Authorize { public function actionAuth() { Auth::checkLogin(); } }
Admin.php:
class Auth { public static function checkLogin() { ... } }
При взаимодействии с классом Auth выводит:
Fatal error: Class 'Admin\Auth' not found in path\Authorize.php on line 10

Возможно, я не понимаю, как работает Autoload, но почему я могу получить доступ ко всем файлам, а использовать их namespace не могу? (PHP 5.6)


Ответ

У вас $class_name передается как полное имя класса вместе с пространством имен.
И вот на этом этапе
$path = ROOT . $path . $class_name . '.php';
у вас получается что-то вроде
ROOT.'/models/Admin\\Auth.php'
А такого файла у вас скорее всего нет

Комментариев нет:

Отправить комментарий