我正在开发一个项目,我已经配置为使用这样的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;
true
或case 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)
并发生了同样的事情。
我如何解决这个问题,有什么问题吗?
答案 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
值,因此该条件为真,并且其下的代码将执行。