负载IF的最佳方式 - ELSE - 包括?

时间:2014-12-03 07:43:54

标签: php

<?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

所以我真的想知道,

如果不使用任何框架,有什么解决方案或更好的方法?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

$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';
}

答案 2 :(得分:0)

您可以使用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";
}

答案 3 :(得分:0)

if($page == NULL) {
    include 'home.php';
} else {
    include "$page.php";
}