自动加载带命名空间的类


Autoloading Namespaced Classes

我到处寻找答案,并尝试了每个例子,但仍然找不到我的类。为什么我一直得到致命错误:在第23行的C:''Portables''examplep''htdocs''ProjectMorpheus''config''config.php中找不到类"ProjectMorpheus ''model''Database"

/ProjectMorpheus
  /model
    Database.class.php
  /config
    config.php

所以我的数据库类有一个这样的名称空间:

namespace ProjectMorpheus'model;
class Database { ... }

最后,我的config.php有一个函数自动加载函数(注意:__SITE_PATH='C:''Portables''examplep''htdocs''ProjectMorpheus'''):

/*** auto load model classes ***/
function __autoload($class){
  $parts = explode('''', $class);
  include __SITE_PATH . 'model/' . end($parts) . '.class.php';
}
$dbh = 'ProjectMorpheus'model'Database::getInstance($dsn, $username, $password);

使用spl_autoloader似乎有效,但为什么呢?我唯一的猜测是$class在两种情况下都不一样。我的spl_function看起来像:

spl_autoload_register(function($class){
   $parts = explode('''', $class);
   include __SITE_PATH . 'model/' . end($parts) . '.class.php';
});

您为什么不使用PSR-0PSR-4自动加载器标准?

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

虽然我不建议,但如果你想坚持使用上面的代码来自动加载类(仅在models文件夹中),请尝试转储__SITE_PATH . 'model/' . end($parts) . '.class.php';的值,并检查你是否可以访问它。你甚至可以尝试将路径复制并粘贴到文件资源管理器,以查看该位置是否可以访问,并且文件是否存在于该目录中。

附言:我试着添加这个作为评论,但由于代表分数低(在这里和所有地方都是新的),我没能添加。