2015-05-30 46 views
2

我想自动载入类,但spl_autoload寄存器没有找到该文件,我收到文件未找到错误。Spl_autoload_register文件未找到

我的文件结构:

index.php 
system/ 
    configs/ 
     config.php 
    messages/ 
     message.php 
    user/ 
     user.php 

因此,这里是我在做什么。

的config.php

我从另一个答案了以下功能

spl_autoload_register(function ($className) { 

# Usually I would just concatenate directly to $file variable below 
# this is just for easy viewing on Stack Overflow) 
    $ds = DIRECTORY_SEPARATOR; 
    $dir = __DIR__; 

// replace namespace separator with directory separator (prolly not required) 
    $className = str_replace('\\', $ds, $className); 

// get full name of file containing the required class 
    $file = "{$dir}{$ds}{$className}.php"; 

    require_once $file; 
}); 

use system\user\user; 

$obj = new User(); 

user.php的

namespace system\user; 
class user{ 
    ... 
} 

我收到以下错误:

Fatal error: require_once(): Failed opening required 'C:\xampp\htdocs\System\Configs\System\User\User.php' (include_path='.;C:\xampp\php\PEAR') in 

任何帮助?

回答

0

更换

$file = "{$dir}{$ds}{$className}.php"; 

$file = "{$dir}/../../{$ds}{$className}.php"; 

让你的根目录为system/,而不是system/configs/

+0

不起作用。 '警告:require_once(C:\ xampp \ htdocs \ System \ Configs /../../ \ System \ User \ Exception.php):未能打开流:没有这样的文件或目录' – Magna

+0

'System \ User \ Exception .php'存在吗? – Federkun

+0

我没有那个文件 – Magna

0

您的文件是: 用户/ user.php的

但您的自动加载器是外观ing: User/User.php

这是因为当你实例化$ obj = new User();那么在自动加载器中您的$ className已成为“用户”。

更改: $ className = strtolower(str_replace('\',$ ds,$ className));

或更改目录结构: 用户/ user.php的

+0

这可能看起来很奇怪,但Windows不区分大小写 – Federkun