Автозагрузчик не подключает классы в папках
Столкнулся с проблемой: не получается подключить файл, если он лежит в папке, через 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
Источник: Stack Overflow на русском