Автозагрузчик не подключает классы в папках

Рейтинг: 0Ответов: 1Опубликовано: 22.02.2023

Столкнулся с проблемой: не получается подключить файл, если он лежит в папке, через use. Проблем с подключением файлов в той же директории не возникает. Если в место use использовать require, все тоже работает корректно

index.php

<?php 

//show errors
ini_set('display_errors',1);
ini_set("error_reporting", E_ALL);

//file loader
spl_autoload_register(function ($class) {
    $file = str_replace('\\', '/', $class) . '.php';
    print('FILE:  ' . $file);  // FILE: Log/Message.php
    require($file); // тут все так же как в строке 16, но не работает
});

use Post as Post; // классы в той же дирректории подключаются без проблем

//require('Log/Message.php'); // так работает
use Log\Message as Message; // а так нет

$msg = new Message('message text', 1);
print($msg -> get_text());

Ошибка

Fatal error: Uncaught Error: Class "Log\Message" not found in /Applications/MAMP/htdocs/parsing/src/index.php:19 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/parsing/src/index.php on line 19

Файловая структура

src/
├── index.php
├── Post.php
└── Log/
    ├── Log.php
    └── Message.php

Ответы

▲ 0Принят

Вы забыли, что вся эта работа с неймспейсами требует...неймспейсов :))

Т.е. в файлах с классами их нужно указать. В классах Log и Message сверху надо написать namespace Log;. А без него use Log\Message откуда должен брать класс?