是否可以使用数组检查而不是Switch语句来获取动态页面内容?

时间:2019-07-02 03:11:32

标签: php

我正在尝试创建一个简单的静态网站,但是我对后端代码的了解不足,使我怀疑自己的能力。使用数组检查而不是switch语句是否存在任何类型的安全风险或我可能要监督的其他事情?

例如,这是我直到最近才使用的代码

// Default page
$current_page = 'home';

if(array_key_exists('page', $_GET)) {
    $current_page = $_GET['page'];
}

switch ($current_page) {
    case 'home':
        $page = 'pages/home.php';
        break;
    case 'about':
        $page = 'pages/about.php';
        break;
    case 'contacts':
        $page = 'pages/contacts.php';
        break;
    default:
        $page = 'pages/404.php';
}

这是我替换为的代码。对于我来说,将将来会扩展的代码(以后将添加更多页面)与永远不会改变的实际检查分开,对我来说更有意义,最重要的是,我认为它看起来更好。

$pages = array(
    'home'              => 'pages/home.php',
    'about'             => 'pages/about.php',
    'contacts'          => 'pages/contacts.php',
    '404'               => 'pages/404.php',
);

// Default page
$page = $pages['home'];

if(array_key_exists('page', $_GET)) {

    $current_page = $_GET['page'];

    if(array_key_exists($current_page, $pages)){
        $page = $pages[$current_page];
    } else {
        $page = $pages['404'];
    }

}

1 个答案:

答案 0 :(得分:0)

它们都很安全,但是第二个则更易于管理。

另一种方法是这样的:

$subFolder = 'pages';
$current_page = $subFolder . DIRECTORY_SEPARATOR . 'home';

if (array_key_exists('page', $_GET)) {
    $current_page = $subFolder . DIRECTORY_SEPARATOR . $_GET['page'] . '.php';
}

if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . $current_page)) {
    $page = $current_page;
} else {
    $page = $subFolder . DIRECTORY_SEPARATOR . '404.php';
}

echo $page;

这不需要您每次添加新页面时都编辑代码。代码本身会检查页面目录中是否存在所请求的页面。