используя SplClassLoader я продолжаю получать class not found
ошибка. Я пробовал разные источники, скопировал их точную структуру папок и имен, но все же not found
,
Моя структура
application
- Router
- Exceptions
- HttpException.php
- Klein.php
index.php
SplClassLoader.php
index.php
$loader = new SplClassLoader('application', 'application');
$loader->register();
$klein = new \router\Klein();
Klein.php
namespace application\router;
class Klein{
__construct()
HttpException.php
namespace Klein\Exceptions;
use RuntimeException;
class HttpException extends RuntimeException implements HttpExceptionInterface
{
Как мне включить оба из них с classLoader?
Точная ошибка:
Fatal error: Class 'router\Klein' not found in /home/i366963/domains/[domain]/private_html/public/index.php on line 44
строка 44 $klein = new \router\Klein();
Предложение:
$loader = new SplClassLoader('application', 'application');
$loader->register();
$klein = new application\Router\Klein();
давать ошибку:
Warning: require(application/application/Router/Klein.php): failed to open stream: No such file or directory in /home/i366963/domains/[domain]/private_html/SplClassLoader.php on line 140
Fatal error: require(): Failed opening required 'application/application/Router/Klein.php' (include_path='.:/usr/local/lib/php') in /home/i366963/domains/[domain]/private_html/SplClassLoader.php on line 140
Итак, глядя на подпись SplClassLoader
, он ожидает два параметра
$ ns (пространство имен)
$ INCLUDEPATH
Итак, прямо сейчас вы добавляете пространство имен «application» и выполняете поиск в каталоге «application».
Это будет означать, что это означает, что пространство имен приложения будет иметь префикс перед всем, что находится в каталоге приложения.
Поэтому, когда вы загружаете \ application \ router, он просматривает каталог application \ application.
Вы можете решить этим, выполнив $loader = new SplClassLoader('application');
Это означает, что он будет просто искать в текущем каталоге.
Теперь, посмотрев на другие опубликованные классы, вы столкнетесь с проблемами, если ваши пространства имен не соответствуют стандарту PSR-0, поэтому вам необходимо убедиться, что ваши пространства имен точно соответствуют структуре каталогов и имени файла (это чувствительно к регистру при любая система * nix)
Других решений пока нет …