Код, безусловно, можно улучшить:
- Переупорядочить тесты, чтобы он не генерировал
E_NOTICE
ошибок - Скобки, чтобы приоритет оператора сразу был очевиден
- Используйте логические операторы
&&
и ||
(как говорится в комментарии Гарви)
После этого у вас будет:
if (empty($_GET['page']) ||
!file_exists('./intl/tpl/' . $_GET['page'] . '.tpl') ||
($_GET['page'] == 'index' && file_exists('./intl/tpl/' . $_GET['page'] . '.tpl')) {
//code
}
} elseif ($_GET['page'] == 'multi' && file_exists('./intl/tpl/' . $_GET['page'] . '.tpl')) {
//code 2
}
Затем перепишите егобольше, чтобы было понятно почему вы делаете то, что делаете.Это также позволит вам писать более простой код.Простое - это хорошо.
// This way it's obvious that 'index' is the default page
$page = !empty($_GET['page']) ? $_GET['page'] : 'index';
if (!file_exists('./intl/tpl/' . $page . '.tpl')) {
$page = 'index'; // comment here saying that if a non-existing page is requested, we display the index instead
}
$template = './intl/tpl/' . $page . '.tpl';
// At this point, we know that $page has a value, and we know that $template exists, so:
switch($page) {
case 'index':
// code
break;
case 'multi':
// code2
break;
}
Что касается второго вопроса: да, вам нужно начать сеанс, прежде чем вы сможете изменить или уничтожить его.