找不到PHP SplClassLoader类

时间:2017-02-18 15:24:49

标签: php class include classloader

使用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
{

如何将这两个包含在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

1 个答案:

答案 0 :(得分:2)

所以看一下SplClassLoader的签名,它需要两个参数

  

$ ns(名称空间)

     

$ INCLUDEPATH

现在你正在添加'application'的命名空间并在'application'目录中搜索。

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

所以当你加载\ application \ router时,它正在查看application \ application目录。

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

现在看看你的其他发布的类,你将遇到的问题是你的命名空间没有遵循PSR-0标准,所以你需要确保你的命名空间与你的目录结构和文件名完全匹配(它是任何基于* nix的系统都区分大小写)