簡體   English   中英

PHP自動加載器找不到必要的類

[英]PHP autoloader cant find necessary class

所以我是第一次學習 PHP MVC,我想出了一個術語——自動加載所有需要的 .php 文件。

所以我在網上搜索了一些示例,並使用spl_autoload_register方法制作了一個自動加載文件,調用了一個匿名方法來require_once所有需要的文件。 我不知道出了什么問題,但它似乎不起作用。

所以我做的spl_autoload_register方法是:

    spl_autoload_register(function($className){
        if(is_file('libraries/' . $className . '.php')){
            echo 'libraries/' . $className . '.php';
            require_once 'libraries/'. $className . '.php';
        }
    });

項目中的文件結構可在此處獲得: https ://prnt.sc/gPaVkLZRsPpj

如果我注釋掉spl_autoload_register方法並一個一個地要求所有必要的文件,它工作得很好。

    require_once 'libraries/Core.php';
    require_once 'libraries/Controller.php';
    require_once 'libraries/Database.php';

我試圖在其中進行自動加載的文件如下所示:

<?php
    require_once '../app/autoload.php';

    // Init Core.php 
    $init = new Core();
    

我得到的錯誤信息是:

Fatal error: Uncaught Error: Class "Core" not found in C:\xampp\htdocs\farkops-mvc\public\index.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\farkops-mvc\public\index.php on line 5

我已經通過互聯網搜索,嘗試了spl_autoload_register的其他實現,但它們都不起作用。

有人可以幫我解決這個問題嗎? :)

所以問題是(正如@Lawrence Cherone 在評論中提到的那樣),自動加載器在當前工作目錄的上下文中被調用,調用該自動加載器的文件位於該目錄中。

所以我做了一些改變。

  1. 制作了一個常量APPROOT ,其中包含指向app文件夾的鏈接(所有核心文件的根文件夾)
define('APPROOT', dirname(dirname(__FILE__)));

就我而言,APPROOT 是C:\xampp\htdocs\mvc\app

  1. 使用該常量通過自動加載器獲取正確的目錄:
spl_autoload_register(function($className){
        if(is_file(APPROOT . '/libraries/' . $className . '.php')){
            require_once APPROOT . '/libraries/' . $className . '.php';
        }
    });

現在,自動加載器可以訪問C:\xampp\htdocs\mvc\app\libraries\Core.php等文件夾中的文件管理器而不會出現任何錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM