PHP命名空间和自动加载不起作用

时间:2014-10-10 13:36:35

标签: php namespaces autoload

我有一个名为Query.php的文件。

namespace Test
{
    class Query
    {
        public function __construct()
        {
            printf("Hello, World");
        }
    }
}

在bootstrap.php中我尝试调用它:

spl_autoload_register(function($className) {
    if(file_exists('../folder/'.$className.'.php'))
    {
        require_once '../folder/'.$className.'.php';
    }
});

new \Test\Query();

结果:致命错误:未找到类Test \ Query。

没有命名空间,它可以正常工作。如何解决?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您必须将\替换为DIRECTORY_SEPARATOR

define('BASE_PATH', realpath(dirname(__FILE__)));
spl_autoload_register(function($className) {
    if(file_exists(BASE_PATH . '../folder/'. str_replace('\\', DIRECTORY_SEPARATOR , $class). '.php'))
    {
        require_once '../folder/'.$className.'.php';
    }
});

这假设您的目录结构如下

  

/folder/boostrap.php

     

/folder/Test/Query.php

请参阅How do I use PHP namespaces with autoload?