问题描述
我正在尝试创建一个类来管理我存储到 $_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 (将#修改为@)