加载 If - else - 包含的最佳方法


The best way for loads of IF - ELSE - INCLUDE?

<?php
    if ($page == null || $page == "home")
        require_once ("home.php");
    else if ($page == "bill")
        require_once ("bill.php");
    else if ($page == "product")
        require_once ("product.php");
    else if ($page == "addproduct")
        require_once ("addproduct.php");
    else if ($page == "editpd")
        require_once ("editpd.php");
    /** ... MANY LINES ... **/
    else if ($page == "permission")
        require_once ("permission.php");
    else if ($page == "options")
        require_once ("option.php");
    else // NOT FOUND, REDIRECT HOME
        echo "SOMETHING WENT WRONG";
?>

上面的代码是IF ELSE and REQUIRE_ONCE的负载。

开始担心系统开发时的执行时间,这意味着我必须越来越多地编写IF ELSE and REQUIRE_ONCE

所以我真的很想知道,

在不使用任何框架的情况下,解决方案或更好的方法是什么?

看起来所有包含文件都与 $page 同名,因此您可以使用字符串处理来删除所有重复的代码。

$pages = array('home', 'bill', 'product', ...);
$page = $page == null ? 'home' : $page;
if (in_array($page, $pages)) {
    require_once ($page . ".php");
}
$page = preg_replace('/'W+/', '', $page); 
if (is_file($page . '.php')) {
    require_once $page . '.php';
}

或带白名单

$whitelist = ['permission', '....'];
if (in_array($page, $whitelist)) {
    require_once $page . '.php';
}

或获得更高的性能

$whitelist = ['permission' => true, '...' => true];
if (isset($whitelist[$page])) {
    require_once $page . '.php';
}
您可以使用

switch()语句,如下所示:

<?php
    switch($page) {
        case "home":
        case null:
            require_once ("home.php");
            break;
        case "bill":
            require_once ("bill.php");
            break;
        case "product":
            require_once ("product.php");
            break;
        case "addproduct":
            require_once ("addproduct.php");
            break;
        case "editpd":
            require_once ("editpd.php");
            break;
    /** ... MANY LINES ... **/

        case "permission":
            require_once ("permission.php");
            break;
        case "options":
            require_once ("option.php");
            break;
        default:
            echo "SOMETHING WENT WRONG";
            break:
    }
?>

但是,如果结构保持不变,也许这将是一个更好的选择:

if(is_null($page)) {
    $page = 'home';
}
if(file_exists($page . '.php')) {
    require_once($page . '.php');
} else {
    echo "SOMETHING WENT WRONG";
}
if($page == NULL) {
    include 'home.php';
} else {
    include "$page.php";
}