【问题标题】:How to use PHP Autoloader in multiple files?如何在多个文件中使用 PHP Autoloader?
【发布时间】:2020-03-30 07:18:51
【问题描述】:

我目前尝试用自动加载器替换我项目中的 requires 和 require_once。我正在使用 MVC 模型,需要自动加载很多文件。

File1:我的自动加载器类/函数如下所示:

<?php

class Autoloader {

    static public function loadEverything() {

        $root = realpath($_SERVER["DOCUMENT_ROOT"]);
        require_once $root . "/src/Model/Device.php";
        require_once $root . "/src/Model/Employee.php";
        require_once $root . "/src/Model/User.php";
        require_once $root . "/src/Controller/Controller.php";
    }

}

File2:我使用这个文件的文件看起来像这样:

$root = realpath($_SERVER["DOCUMENT_ROOT"]);
require_once $root . "/src/Model/Autoloader.php";
spl_autoload_register('Autoloader::loadEverything');

但这不起作用。如何在 File2 中激活该自动加载?我不明白。感谢您的帮助。

【问题讨论】:

    标签: php autoloader


    【解决方案1】:

    当你想自动加载你的类时,你会这样做:

    function my_autoloader($class) {
        include $root . 'classes/' . $class . '.class.php';
    }
    
    spl_autoload_register('my_autoloader');
    

    如果您想加载其他任何内容,您可以编写一个新函数,该函数会在您放置所有 require_once 内容的位置被调用。

    这行得通:

    class Autoloader {
    
        static public function loadEverything() {
            $root = realpath($_SERVER["DOCUMENT_ROOT"]);
    
            //Autoloading classes
            spl_autoload_register(function ($class) {
                $root . 'Model/' . $class . '.php';
            });
    
            //Manually load needed files
            require_once $root . "/src/Model/Device.php";
            require_once $root . "/src/Model/Employee.php";
            require_once $root . "/src/Model/User.php";
            require_once $root . "/src/Controller/Controller.php";
        }
    
    }
    
    Autoloader::loadEverything();
    

    如果您是 mvc 新手,可以在 youtube 上观看 Codecourse 的视频。他有大约 25 个关于 mvc 应用程序的视频,而且他解释得非常好。

    【讨论】:

    • 但是我是将它插入到我的自动加载器类中还是在我想要使用所需文件的文件中?
    • 你可以把这个函数放在你的类中,也可以不把这个spl_autoload_register('my_autoloader');放在你的loadEverything()函数中。
    • 我这样做了,但我认为我犯了一个错误,因为我仍然得到一个错误。你能检查我是否插入正确吗? hastebin.com/uxuhinofub.js
    • @janisch $root = realpath($_SERVER["DOCUMENT_ROOT"]); 不需要在自动加载函数中,因为如果在自动加载函数中定义了,在做require_once $root . "/src/Model/Device.php";时就不能使用了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多