我正在尝试自动加载类,但是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
任何帮助?
答案 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的