PHP 自动加载器重复路径

问题描述 投票:0回答:1

我想学习 PHP 中的自动加载器,但加载器将我的路径复制到我的文件,但它不起作用。

<?php


function myAutoLoader($class){
    $directories = [
        __DIR__ .  "/classes/account/",
        __DIR__ .  "/classes/database/",
    ];
    $extension = ".php";

    foreach ($directories as $directory){
        $fullPath = $directory . str_replace('\\', '/', $class) . $extension;
        var_dump($fullPath);
        if(file_exists($fullPath)) {
            require_once $fullPath;
            return true;
        }
    }
    return false;
}

spl_autoload_register('myAutoLoader');

和我的课程,我想要获得路径吗:

<?php

namespace controllers;


use classes\account\RegisterAccount;

require_once __DIR__ . "/../includes/autoloader.php";

class RegisterController extends RegisterAccount

但是路径重复: 字符串(94)“C:\xampp\htdocs eservationSystem\includes/classes/account/classes/account/RegisterAccount.php" 字符串(95)

我的目录结构是: 项目/ ├── 课程/ │ ├── 帐号/ | ___注册帐户.php │ └── 数据库/ │ └── Connect.php └── 包括/ └── autoloader.php

我在 youtube 和 sof 上搜索答案,但没有找到解决方案。

php duplicates autoload
1个回答
0
投票

传入自动加载器的

$class
是包含命名空间的类。

所以在你的情况下

$class
的值是
classes\account\RegisterAccount

所以你可以废弃这部分

$directories = [
    __DIR__ .  "/classes/account/",
    __DIR__ .  "/classes/database/",
];

所以你的函数应该是这样的

function myAutoLoader($class){
    $extension = ".php";

    $fullPath = __DIR__ . '/' .  str_replace('\\', '/', $class) . $extension;
    if(file_exists($fullPath)) {
        require_once $fullPath;
        return true;
    }
    return false;
}
© www.soinside.com 2019 - 2024. All rights reserved.