Switch和if语句返回第一个case条件,无论它是否为true

时间:2016-11-17 09:22:43

标签: php

我正在开发一个项目,我已经配置为使用这样的switch语句从一个index.php文件提供多个页面:

|1. TOYS-----------|

|LEGO--------------|

|Product 1|199,99--|

|Product Text------|

|Product 2|299,99--|

|Product Text------|

|MARVEL------------|

|Product 3|79,99---|

|Product Text------|

|2. FOOD-----------|

|Vegetables--------|

|Product 4|9,99----|

|Product Text------|

|Product 5|2,99----|

|Product Text------|

随着时间的推移,添加了更多页面,我决定将其移动到switch(isset($_GET['q']{ case 'page': require 'link_to_page.php'; break; case 'login': require = 'link_to_login.php'; break; default: require = 'link_to_404.php'; break; } 函数,我现在调用它并将其分配给变量selectPage(),并在我的index.php文件中将其命名为使事情变得更简单:

$page

我的index.php看起来像这样:

myFunctions.php

selectPage()
{
    switch(isset($_GET['q']{
        case 'page':
            $output = 'link_to_page.php';
            break;
        case 'login':
            $output = 'link_to_login.php';
            break;
        default:
            $output = 'link_to_404.php';
            break;
        return $output;
    }
}

现在的问题是,无论require 'myFunctions.php'; $page = selectPage(); require $page; truecase page:是哪种情况,case 'login':返回的$output始终等于case的第一行检查条件,例如当case page:case语句的第一行并且$_GET['q'] == 'login'时,返回case page: $output值,当我交换{{1如果case 'login': case page:值为case 'login': $output,则现在即使$_GET['q'] == 'page'也会返回第一行条件。

我也尝试了if(statement)并发生了同样的事情。 我如何解决这个问题,有什么问题吗?

3 个答案:

答案 0 :(得分:1)

语法错误您的Switch语句。

右语法:

switch (n) {
    case label1:
        code to be executed if n=label1;
        break;
    case label2:
        code to be executed if n=label2;
        break;
    case label3:
        code to be executed if n=label3;
        break;
    ...
    default:
        code to be executed if n is different from all labels;
}

所以,myFunctions.php Page

function selectPage()
{
    $page = isset($_GET['q']) ? $_GET['q'] : null;
    switch ($page) {
        case "page":
            return 'link_to_page.php';
            break;
        case "login":
            return "link_to_login.php";
            break;
        default:
           return "link_to_404.php";
    }
}

index.php页面

require 'myFunctions.php';
$page = selectPage();
require $page;

答案 1 :(得分:0)

试试这个:

 switch($_GET['q']){
    ....
 }

答案 2 :(得分:0)

您尝试检查$_GET['q'],但确实检查了isset($_GET['q']),因此当PHP获得true时,它会尝试将您在case语句中提供的值与{{1}进行比较}。并且由于您的值不为空或true值,因此该条件为真,并且其下的代码将执行。