Проблема с использованием spl_autoload_register

Делаю сейчас для себя проект, хочу разобраться в автозагрузке и неймспейсах. Есть следующая структура проекта:

структура проекта Получаю следующие проблемы.

  1. Когда перехожу в тестовый файл где есть такой код:
use App\App;
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
require($_SERVER['DOCUMENT_ROOT'].'/Core/App.php');
$a = new App;
$a::getView('test');

Получаю следующую ошибку

Warning: require_once(/volume1/web/tasks\App\Classes\DB.php): failed to open stream: No such file or directory in /volume1/web/tasks/Core/App.php on line 12 Fatal error: require_once(): Failed opening required '/volume1/web/tasks\App\Classes\DB.php' (include_path='.:/var/packages/PEAR/target') in /volume1/web/tasks/Core/App.php on line 12

Как я подозреваю - проблема в слешах (у меня Win10, сменить на линукс не получится).

  1. в коде подключения к базе данных при использовании пространства имен получаю эту ошибку. По идее использования автолодера должно было ее решить, нет? ошибка при использовании namespace Композером практически не умею пользоваться, хотя читал что эту проблему можно решить с помощью него. Но так как проект не особо большой я хотел бы понять как вообще работает автозагрузка и неймспейсы на практике, не думаю что композер стоит разворачивать ради 5-6 классов, да и не умею особо им пользоваться

Автозагрузка идет в классе App, код ниже

namespace App;
use App\Classes\DB as DB;
use App\Route\Route as Routs;
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

class App{
        function __construct(){
            spl_autoload_register(function ($class_name) {
                require_once ($_SERVER['DOCUMENT_ROOT'].'/'.$class_name . '.php');
            });
            self::InitDB();
            self::InitRouting();
            // self::Init();
            // self::test();
        }
        static function InitRouting(){
            $route = new Routs;
            return $route;
        }
        static function InitDB(){
            $db = new DB;
            return $db;
        }
        static function getView($view){
            $r = Routs::base_path_route();
            $str = $r['views'].$view;
            return $str;
        }
    }

Ответы (1 шт):

Автор решения: Антон

Короче в чем была проблема... По первому пункту @u_mudler подсказал решение:

$str = str_replace("\\", "/", $str);
require_once ($str);

По второму пункту нагуглил объяснение\решение этой проблемы. Надо было обращаться к глобальному пространству имен, то есть

$mysqli = new \mysqli('ccc', 'ccc', 'ccsc', 'ccd'); //correct
$mysqli = new \mysqli('ccc', 'ccc', 'ccsc', 'ccd'); // this not correct if used namespace
→ Ссылка