Исходный код
<?
<em>/////////////////////////////// GAME START TASOVKA //////////////////////////////////////////////////</em>if($page == "game_start")
{
if( isset($_SESSION["game"]) && !empty($_SESSION["game"]) )
{
session_unregister("game");
}
if( isset($_SESSION["total_price"]) && !empty($_SESSION["total_price"]) )
{
session_unregister("total_price");
}
if( isset($_SESSION["game_num"]) && !empty($_SESSION["game_num"]))
{
session_unregister("game_num");
}
if( isset($_SESSION["ticket_num"]) && !empty($_SESSION["ticket_num"]) )
{
session_unregister("ticket_num");
}
if( isset($_SESSION["for_fl"]) && !empty($_SESSION["for_fl"]) )
{
session_unregister("for_fl");
}
<em>//---------------------------------------------------//</em>if( isset($_SESSION["order_res_query3"]) && !empty($_SESSION["order_res_query3"]) )
{
session_unregister("order_res_query3");
}
if( isset($_SESSION["order_res_query2"]) && !empty($_SESSION["order_res_query2"]) )
{
session_unregister("order_res_query2");
}
if( isset($_SESSION["order_res2"]) && !empty($_SESSION["order_res2"]) )
{
session_unregister("order_res2");
}
if( isset($_SESSION["order_res"]) && !empty($_SESSION["order_res"]) )
{
session_unregister("order_res");
}
if( isset($_SESSION["user_not_reg"]) && !empty($_SESSION["user_not_reg"]) )
{
session_unregister("user_not_reg");
}
if( isset($_SESSION["order_id"]) && !empty($_SESSION["order_id"]) )
{
session_unregister("order_id");
}
if( isset($_SESSION["user_edit_type"]) && !empty($_SESSION["user_edit_type"]) )
{
session_unregister("user_edit_type");
}
<em>//---------------------------------------------------//</em>if( isset($_SESSION["order_date"]) && !empty($_SESSION["order_date"]) )
{
session_unregister("order_date");
}
if( isset($_SESSION["drawing_num"]) && !empty($_SESSION["drawing_num"]) )
{
session_unregister("drawing_num");
}
}
<em>/////////////////////////////// GAME START TASOVKA //////////////////////////////////////////////////</em>?><?<em>/////////////////////////////// CHOSE TASOVKA //////////////////////////////////////////////////</em>if($page == "chose")
{
if( isset($_SESSION["order_res_query3"]) && !empty($_SESSION["order_res_query3"]) )
{
session_unregister("order_res_query3");
}
if( isset($_SESSION["order_res_query2"]) && !empty($_SESSION["order_res_query2"]) )
{
session_unregister("order_res_query2");
}
if( isset($_SESSION["order_res2"]) && !empty($_SESSION["order_res2"]) )
{
session_unregister("order_res2");
}
if( isset($_SESSION["order_res"]) && !empty($_SESSION["order_res"]) )
{
session_unregister("order_res");
Что не так в исходном коде
Нетрудно видеть, что каждый if
выполняет одно и то же действие: проверяет и очищает указанную переменную сессии. Казалось бы, простой алгоритм: проверь значение и удали при наличии — а всё равно это алгоритм, он использует для реализации определённую последовательность операций. Соответственно, реализацию алгоритма необходимо прятать в функцию:
function cleanup_session_var($var_name)
{
if ( isset($_SESSION[$var_name]) && !empty($_SESSION[$var_name]) ) {
session_unregister($var_name);
}
}
constGAME_VARIABLES = [
'game', 'total_price', 'game_num', 'ticket_num', 'for_fl', 'order_res_query3', 'order_res_query2', 'order_res2',
'order_res', 'user_not_reg', 'order_id', 'user_edit_type', 'order_date', 'drawing_num',
];
constCHOSE_VARIABLES = [
'order_res_query3', 'order_res_query2', 'order_res2', 'order_res',
];
switch ($page) {
case"game_start":
foreach (GAME_VARIABLES as$var_name) {
cleanup_session_var($var_name);
}
break;
case"chose":
foreach (CHOSE_VARIABLES as$var_name) {
cleanup_session_var($var_name);
}
break;
}
Если кроме очистки переменных не предполагается больше никаких инициализироующих операций, то очистку можно реализовать чуть более компактно:
switch ($page) {
case"game_start": $cleanup_vars = GAME_VARIABLES; break;
case"chose": $cleanup_vars = CHOSE_VARIABLES; break;
}
foreach ($cleanup_varsas$var_name) {
cleanup_session_var($var_name);
}
Строго говоря, смысл функции session_unregister
заключается в отмене регистрации сессионной переменной как глобальной переменной, а вовсе не в очистке её значения. Возможно, вместо session_unregister
следует использовать обычный unset
. Также нет особой необходимости проверять наличие значения перед его очисткой, поэтому if
здесь может быть избыточным.
Если смотреть на архитектуру проекта шире, то можно легко видеть, что хранение переменных игры в отдельных переменных сессиях иногда доставляет больше хлопот, чем удобств. Стоит рассмотреть вариант совместного хранения переменных игры в одной переменной сессии в виде массива (а лучше — сгруппированными по смыслу):
$_SESSION['game']['game_num']
$_SESSION['game']['ticket_num']
$_SESSION['order']['total_price']
$_SESSION['order']['order_res_query2']
$_SESSION['order']['order_res_query3']
$_SESSION['order']['order_res']
$_SESSION['order']['order_res2']