Php 装载IF-ELSE-INCLUDE的最佳方式是什么?

Php 装载IF-ELSE-INCLUDE的最佳方式是什么?,php,Php,以上代码是加载的IF-ELSE和REQUIRE\u一次 我已经开始担心系统开发时的执行时间,这意味着我必须编写IF-ELSE,并要求一次越来越多 所以我真的很想知道 在不使用任何框架的情况下,有什么解决方案或更好的方法来解决此问题?看起来所有包含文件都与$page同名,因此您可以使用字符串处理来删除所有重复的代码 <?php if ($page == null || $page == "home") require_once ("home.php"); el

以上代码是加载的
IF-ELSE和REQUIRE\u一次

我已经开始担心系统开发时的执行时间,这意味着我必须编写
IF-ELSE,并要求一次
越来越多

所以我真的很想知道


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

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

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

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

<?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";
?>
还是白名单

$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';
}
还是白名单

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

您可以使用
switch()
语句,如下所示:

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

您可以使用
switch()
语句,如下所示:

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

为什么不使用
开关
statement@MMK:在这种情况下,
switch
语句真的比
IF-ELSE
更快吗?请看这里一个更好的方法是:创建一个包含所有页面名称的数组@巴尔马的回答真的很酷。你应该去掉所有的
if-else
为什么不使用
开关
statement@MMK:在这种情况下,
switch
语句真的比
IF-ELSE
更快吗?请看这里一个更好的方法是:创建一个包含所有页面名称的数组@巴尔马的回答真的很酷。你应该扔掉所有的
if-else
请永远不要做第二个版本。。。。。require_一旦理解../paths,您就可以用空字节结束$page,以包含您需要的任何内容want@MichaelFreund请解释完整的代码,而不是其中的一行。。。这永远不会发生,因为
file\u exists()
函数将找不到有效的文件名。
。/.php
文件存在(“../../../badfile.”.php')是绝对有效的,如果它存在的话。。。。这是一个糟糕的文件泄漏,@MichaelFreund如果您有安全问题,请遵循以下程序;1.查找PHP上的函数参考,并阅读红色大轮廓部分()。2.谁说,
$page
是用户可以改变的东西?没有指定需要一个白名单,这不能从被问到的问题中推断出来。请不要做第二个版本。。。。。require_一旦理解../paths,您就可以用空字节结束$page,以包含您需要的任何内容want@MichaelFreund请解释完整的代码,而不是其中的一行。。。这永远不会发生,因为
file\u exists()
函数将找不到有效的文件名。
。/.php
文件存在(“../../../badfile.”.php')是绝对有效的,如果它存在的话。。。。这是一个糟糕的文件泄漏,@MichaelFreund如果您有安全问题,请遵循以下程序;1.查找PHP上的函数参考,并阅读红色大轮廓部分()。2.谁说,
$page
是用户可以改变的东西?它没有指定需要一个白名单,这也不能从询问的问题中推断出来:require_曾经不是一个函数,它是一个语句,就像echo。。。所以不需要(和)。。。。你不应该使用它们不要使用没有白名单的解决方案!顺便说一句:require_once不是一个函数,它是一个语句,就像echo。。。所以不需要(和)。。。。你不应该使用它们不要使用没有白名单的解决方案!“in_array()”在这个解决方案中非常重要,因为它限制了允许加载的页面。否则,您将获得一个安全漏洞,用户可以在服务器上的任何php上请求_。在这个解决方案中,“in_array()”非常重要,因为它限制了允许加载的页面。否则,您将获得一个安全漏洞,用户可以在服务器上的任何php上请求一次。