PHP Class 未找到但它在文件夹中并且也包括在内

PHP Class not found but it's in folder and it is also included

我有一个独特的问题...如果我以这种方式包含文件:

<?php     
    session_start();
    session_regenerate_id();
    foreach (glob("../class/*.php") as $filename)
    {
        echo "$filename\n";
        include $filename;
    }
    foreach (glob("../utilities/*.php") as $filename) {
        echo "$filename\n";
        include $filename;
    }

class ECommerce {
    private $checker;
    private $errorManager;

    /**
     * ECommerce constructor.
     */
    function __construct() {
        $this->checker = new Checker();
        $this->errorManager = new ErrorManager();
    }

网站打不开,我什么时候能打

$ecommerce = new ECommerce();

它说

Class 'ErrorManager' not found in path

当我想尝试这个时,我想到了什么:

 <?php     
    session_start();
    session_regenerate_id();
    include "../class/Checker.php";
    include "../class/User.php";
    include "../utilities/ErrorManager.php";

class ECommerce {
    private $checker;
    private $errorManager;

    /**
     * ECommerce constructor.
     */
    function __construct() {
        $this->checker = new Checker();
        $this->errorManager = new ErrorManager();
    }

以这种方式,它可以正常工作,任何事情都可以做它必须做的事情!
"why" 这个问题在我内心根深蒂固,我无法入睡(真的)。
为什么第一种方式适用于除 ErrorManager 之外的所有 classes?
先谢谢了!

这里有 ErrorManager class 代码(它有像 Checker class 一样的空白结构)

<?php
class ErrorManager
{
function __construct() {
}

function getErrorUserNameNotValid() {
    return "Nome inserito non valido";
}

function getErrorUserSurnameNotValid() {
    return "Cognome inserito non valido";
}

function getErrorUserEmailAlreadyExists() {
    return "Email inserita non valida!";
}

function getErrorUserEmailNotValid() {
    return "Email inserita non valida!";
}

function getErrorUserPasswordNotValid() {
    return "Password inserita non valida! Inserisci una password che sia lunga tra i 6 e i 50 caratteri!";
}

function getErrorUserAddressNotValid() {
    return "Indirizzo inserito non valido!";
}

function getErrorUserPhoneNumberNotValid() {
    return "Numero telefonico inserito non valido! Inserisci solo numeri, senza trattini o caratteri speciali!";
}
}

我也附上了文件夹的截图

我正在尝试使用 AutoLoader:
这是电子商务 class:

spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');

这是在 MyAutoloaderClass 中

class MyAutoloader
{
public static function ClassLoader($className)
{
    $path = "../class/";
    include $path.$className.'.php';
}


public static function LibraryLoader($className)
{

    $path = __DIR__."/";
    include $path.$className.'.php';
}

}

上面写着

include(../class/ErrorManager.php): failed to open stream: No such file or directory in

相对路径上的

include 将根据被调用的 PHP 脚本的路径搜索文件,而不是您正在从中调用 include 的包含的 PHP 文件。

即使您的电子商务 class 从不同的位置使用也能包含在内,请尝试

include __DIR__ . '/' . $filename;

在较旧的 PHP 版本中,您可以使用 dirname(__FILE__) 而不是 __DIR__

ErrorManager.php 加载之前可能还有其他依赖项,例如在 Dispatcher.php.

如果你测试以下会发生什么?

include "../class/Checker.php";
include "../class/User.php";
include "../utilities/Dispatcher.php";
include "../utilities/ErrorManager.php";

考虑使用像 spl_autoload_register 这样的 class 加载机制。它使 class 依赖管理更容易。