使用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
答案 0 :(得分:2)
所以看一下SplClassLoader
的签名,它需要两个参数
$ ns(名称空间)
$ INCLUDEPATH
现在你正在添加'application'的命名空间并在'application'目录中搜索。
这意味着应用程序名称空间将以应用程序目录中找到的所有内容为前缀。
所以当你加载\ application \ router时,它正在查看application \ application目录。
你可以通过$loader = new SplClassLoader('application');
来解决这个问题,这意味着它只会向前搜索当前目录。
现在看看你的其他发布的类,你将遇到的问题是你的命名空间没有遵循PSR-0标准,所以你需要确保你的命名空间与你的目录结构和文件名完全匹配(它是任何基于* nix的系统都区分大小写)