@newProgrammer2017

Как правильно делать автозагрузку родительского класса?

Добрый день. Помогите пожалуйста разобраться с проблемой. Делаю автозагрузку классов. Структура такая, в корне сайта есть index.php в нем с помощью require() подключается файл с настройками config.php и ниже создание экземпляра класса постов Post.
require('./config.php');
$post = new \Vendor\Blog\Post();

В config.php есть настройки для подключения к БД, функция автозагрузки классов project_autoload() и ее регистрация через spl_autoload_register(). Подключаемые классы находятся /lib/Vendor/Blog/ относительно корневой папки сайта.
function project_autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = $_SERVER['DOCUMENT_ROOT'].'/lib/';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  .= str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
    require_once($fileName);
}

Класс DB.php содержит следующий код:
namespace Vendor\Blog\DB;

class DB
{
//code
}

Класс Post.php содержит следующий код:
namespace Vendor\Blog\Post;
use Vendor\Blog\DB;

class Post extends DB
{
     //code
}

Выдает ошибку:
Fatal error: Class 'Vendor\Blog\DB' not found in ....../public_html/lib/Vendor/Blog/Post.php on line 7

7 строка, это строка со скобкой { в начале:
class Post extends DB
{
     public $id;
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
@newProgrammer2017 Автор вопроса
Спасибо что откликнулись, ответ дали на другом ресурсе:
namespace неправильно указан, в обоих классах.
В твоём случае должно быть namespace Vendor\Blog;
А уже в use указывай и namespace, и имя класса.
Andkorol,
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gobananas
@gobananas
botbot.ru
Автозагрузку классов правильно делать через Composer, просто прописываете в его конфиге пути к вашим классам потом в коде создаёте экземпляр и всё
Ответ написан
@oxidmod
spl_autoload_register устаревшая... не стоит ее юзать. Берите композер и изучите его код (он на пхп написан)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
от 2 000 до 4 000 usd.
HTML Academy Санкт-Петербург
от 130 000 до 140 000 руб.
Duotek Москва
До 120 000 руб.