找不到Spl_autoload_register文件

时间:2015-05-30 19:39:00

标签: php oop

我正在尝试自动加载类,但是spl_autoload寄存器找不到文件,我发现找不到文件错误。

我的文件结构:

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 

任何帮助?

2 个答案:

答案 0 :(得分:1)

替换

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

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

这样你的根目录就是system/而不是system/configs/

答案 1 :(得分:0)

您的文件位于: 用户/ user.php的

但您的自动加载器正在寻找: 用户/ user.php的

这是因为当你实例化$ obj = new User();那么自动装带器中的$ className就变成了“用户”。

变化: $ className = strtolower(str_replace('\',$ ds,$ className));

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