Класс 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'
А такого файла у вас скорее всего нет
Комментариев нет:
Отправить комментарий