PHP:即使在使用类自动加载器时也出现未定义的方法错误?

问题描述

我正在尝试创建一个类来管理我存储到 $_SESSION 全局数组中的所有数据。 到目前为止,我一直在使用使用 spl_autoload_register 加载我的类的脚本。

这是我的自动加载脚本(在 PHP/scripts/classLoader.PHP 中):

<?PHP

spl_autoload_register('loadUtils');

function loadUtils($class)
{
    $path = "PHP\\classes\\utils\\";
    $extension = ".PHP";
    include_once($path . $class . $extension);
}

这是我的 SessionHandler 类(在 PHP/classes/utils/SessionHandler.PHP 中)

<?PHP
class SessionHandler
{
    private const ParaMS = [
         "USER" => "user-data","ADMIN" => "admin-data","ALERTS" => "alert-options",];

    public static function startSession()
    {
        session_start();
    }

    public static function setAlertOptions(AlertOptions $ao)
    {
        $_SESSION[self::ParaMS["ALERTS"]] = $ao;
    }

    public static function getAlertOptions(): AlertOptions
    {
        return $_SESSION[self::ParaMS["ALERTS"]] ?? new AlertOptions();
    }
}

这里是根据请求,AlertHandler 类 (PHP/classes/utils/AlertHandler.PHP) 请注意,最后两种方法用于从 $_SESSION 中获取和存储数据,在实现 SessionHandler 之前,它曾经可以正常工作。

class AlertHandler
{
    private const ParaM_NAME = "alert-options";

    public static function showAlert()
    {
        $_alertOptions = self::getFromSession();
        $_message = $_alertOptions->message;
        $_show = $_alertOptions->show;

        if ($_message && $_show) {
            echo <<<ERROR
            <div class="container mt-3 alert alert-primary align-self-stretch">
                {$_message}
            </div>
            ERROR;
        }

        //reset error status
        self::setIntoSession(new AlertOptions());
    }

    public static function setMessage(string $message = "")
    {
        $_alertOptions = SessionHandler::getAlertOptions();
        $_alertOptions->message = $message ?? "";
        SessionHandler::setAlertOptions($_alertOptions);
    }

    public static function toggle(?bool $state = null)
    {
        $_alertOptions = SessionHandler::getAlertOptions();
        $_alertOptions->show = $state ?? !$_alertOptions->show;
        SessionHandler::setAlertOptions($_alertOptions);
    }

    public static function handleException(
        Exception $e,string $redirect = "index.PHP",) {
        self::setMessage("Error: {$e->getMessage()} En: {$e->getFile()},línea {$e->getLine()}");
        self::toggle(true);
        header("Location: $redirect");
    }

    private static function getFromSession(): AlertOptions
    {
        return $_SESSION[self::ParaM_NAME] ?? new AlertOptions();
    }

    private static function setIntoSession(AlertOptions $ao)
    {
        $_SESSION[self::ParaM_NAME] = $ao;
    }
}

最后,这是我的 index.PHP

<?PHP
//PHP Scripts
include_once('PHP/scripts/classLoader.PHP');
include_once('PHP/scripts/errorHandler.PHP');
?>

<?PHP include_once('PHP/components/Header.PHP'); ?>


<body class="d-flex flex-column">
    <?PHP include_once('PHP/components/Navbar.PHP') ?>

    <?= SessionHandler::startSession() ?>
    <?= AlertHandler::showAlert(); ?>

    <div id="main" class="d-flex flex-fill align-items-center justify-content-center">
        <?PHP try {
            Router::redirect($_GET['location'] ?? null);
        } catch (Exception $e) {
            AlertHandler::handleException($e);
        } ?>
    </div>
</body>

每当我从 SessionHandler 调用任何方法时,我都会收到以下错误Call to undefined method SessionHandler::[method]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...