Php 自动加载命名空间类

Php 自动加载命名空间类,php,oop,namespaces,autoload,Php,Oop,Namespaces,Autoload,我到处寻找答案,并尝试了每一个例子,但仍然找不到我的类。为什么我总是遇到致命错误:在第23行的C:\Portables\xampp\htdocs\ProjectMorpheus\config\config.php中找不到类“ProjectMorpheus\model\Database” /ProjectMorpheus /model Database.class.php /config config.php 因此,我的数据库类具有如下名称空间: namespace Pr

我到处寻找答案,并尝试了每一个例子,但仍然找不到我的类。为什么我总是遇到致命错误:在第23行的C:\Portables\xampp\htdocs\ProjectMorpheus\config\config.php中找不到类“ProjectMorpheus\model\Database”

/ProjectMorpheus
  /model
    Database.class.php
  /config
    config.php
因此,我的数据库类具有如下名称空间:

namespace ProjectMorpheus\model;
class Database { ... }
最后,my config.php有一个函数autoloader函数(注意:uu SITE_PATH='C:\Portables\xampp\htdocs\ProjectMorpheus\'):

使用spl_自动加载器似乎可行,但为什么?我唯一的猜测是$class在这两种情况下并不相同。我的spl_函数如下所示:

spl_autoload_register(function($class){
   $parts = explode('\\', $class);
   include __SITE_PATH . 'model/' . end($parts) . '.class.php';
});
为什么不使用或PSR-4自动装弹机标准

他们甚至已经准备好使用autoloader类,只要您遵守规则,就不会有任何问题,并且您的代码将是PSR

虽然我不推荐,但如果您想坚持使用上述代码自动加载类(仅在models文件夹中),请尝试转储
\u SITE\u PATH的值型号/'。完(部分)。class.php'
并检查您是否可以访问它。您甚至可以尝试将路径复制并粘贴到文件资源管理器,以查看该位置是否可访问,以及该目录中是否存在该文件


顺便说一句,我试图添加此作为评论,但由于代表分数低(在这里和所有地方都是新的),我无法添加此评论。

\u站点\u路径闻起来有老鼠味。。。你能把它打印出来看看它的内容吗?同样,删除\ProjectMorpheus\model\Database::getInstance($dsn,$username,$password)之前的第一个斜杠;我建议使用
spl\u autoload\u register()
,更多信息可以在@GRSEV找到。如果您是正确的,我已经更新了我的问题。我可以100%确认u SITE_PATH==C:\Portables\xampp\htdocs\ProjectMorpheus\并且删除第一个/during类声明并不能解决问题。@cmorrissey我同意你的观点;但是,我被迫使用的服务器没有支持spl_autoloadspl_autoload的PHP版本。spl_autoload来自PHP5.1.2,名称空间-表单5.3。如果您没有“spl\U自动加载”,那么您可能也没有命名空间支持。。。你的PHP版本是什么?我照你说的做了,并附和了“站点路径”型号/'。完(部分)。class.php';输出,然后将其复制并粘贴到文件资源管理器。我想我的新问题是为什么自动加载无法执行与spl自动加载相同的功能。我唯一的猜测是$class是不同的,但我无法在_autoload函数中回显$class。只要您的路径和文件名是可访问的,您就不会有问题。在包含类文件之前,尝试输出这两个变量,并查看实际差异。顺便说一句,如果PSR-0或PSR-4自动加载器解决了问题,最好还是坚持标准。您将在PSR标准中找到越来越多的其他PHP类/库,这意味着您在项目中使用它们将更加容易。
spl_autoload_register(function($class){
   $parts = explode('\\', $class);
   include __SITE_PATH . 'model/' . end($parts) . '.class.php';
});