自动加载命名空间类

时间:2014-11-04 20:53:36

标签: php oop namespaces autoload

我已经搜索了高低的答案并尝试了每个例子,但是仍然无法找到我的课程。为什么我一直在第23行的C:\ Portables \ xampp \ htdocs \ ProjectMorpheus \ config \ config.php中找到致命错误类'ProjectMorpheus \ model \ Database'

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

所以我的Database类有一个这样的命名空间:

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

最后,我的config.php有一个函数自动加载器函数(注意:__SITE_PATH ='C:\ Portables \ xampp \ 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';
});

1 个答案:

答案 0 :(得分:1)

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

他们甚至在GitHub上都有现成的自动加载器课程。只要您遵守规则,您就不会遇到任何问题,而且您的代码将是PSR。

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

P.S。我试图将此作为评论添加,但由于低代表我无法做到。积分(在这里和所有地方都是新的)。