PHP SplClassLoader class 未找到

PHP SplClassLoader class not found

使用 SplClassLoader 我不断收到 class not found 错误。我尝试了各种 sources,复制了它们的确切文件夹结构和命名,但仍然 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
{

我如何将它们都包含在类加载器中?

准确的错误是: 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 (namespace)

$includePath

现在您要添加 'application' 的名称space 并在 'application' 目录中搜索。

这意味着应用程序名称 space 将以应用程序目录中的所有内容为前缀。

因此,当您加载 \application\router 时,它会在 application\application 目录中查找。

你可以通过 $loader = new SplClassLoader('application'); 来解决这个问题,这意味着它只会从当前目录向前搜索。

现在看看你的其他帖子 类 你会 运行 问题是你的名字 space 不符合 PSR-0 标准,所以你会需要确保你的名字spaces 与你的目录结构和文件名完全匹配(在任何基于 *nix 的系统上都是区分大小写的)