我在PHP中设计一个半基础工具,我有更多的服务器端经验,而不是PHP。
我的工具包含10-15页,我正在使用$_GET
参数进行导航。
在我的代码中,我有许多if语句:
if(isset[param1] && !isset[param2] && .....&& !isset[paramN]){
// code
}
你会同意我的意见,这很难看,对吧?
"我们如何在PHP中执行此操作" ?或者在PHP网站中是否存在某种用于导航的设计模式/功能?
编辑:为了更清楚,我想知道的是:设计导航的正确方法是使用大量$_GET
个变量吗?
答案 0 :(得分:2)
要避免使用if else语句,请尝试开关语句:
$param1 = 'something';
switch (true){
case isset($param1):
echo "PARAM 1 is set";
break;
case isset($param2):
echo "PARAM 2 is set";
break;
default:
echo "None set";
}
要回答您的修改 - 是的,您可以使用_GET
变量进行导航,这是正常的。
答案 1 :(得分:1)
实际上,这个问题的解决方案有点复杂,乍一看似乎有点复杂。而且你需要为它实现一个处理程序,因为你正在寻找一种最简洁的方法来处理GET参数和调用代码片段。
在你的情况下,你的最终API应该是这样的(因为你要求设计,而不是实现):
$nav = new Nav($_GET);
$nav->whenSet('param1', 'param2')->andNotSet('param3')->then(function(){
});
$nav->whenSet('param3')->andNotSet('param1', 'param2')->then(function(){
});
// Or a simpler and shorter way
$nav->register($existingKeys, $nonExistingKeys, function(){
});
您拥有的另一个选择是使用路由机制。大多数PHP框架都提供此功能。它们都支持可选的路径片段,因此您可以处理仅定义一个路径路径的参数,例如/page/?
(? - 表示可选)。
答案 2 :(得分:0)
这是我的建议在数组中添加条件而不是使用in_array()
echo in_array($yourVar, array('abc', 'def', 'hij', 'klm', 'nop'))
? True
: false;
<强>更新强>
$get = "abc";
$navigation = array(
"abc"=>"yourneed",
"def"=>"yourneed2",
"ghi"=>"yourneed3",
);
foreach($navigation as $key => $value){
if($key == $get){
echo $value;
}
}
还可以定义路线的另一种解决方案。 与CI和YII相同。
答案 3 :(得分:0)
(我没有使用开关,但你一定要试试,并尝试在两种情况下使用中断)
我现在正在使用它,它似乎避免了大规模的IFfing:
if (!$_GET) {
homePageFunction();
}elseif($_GET) {
contentPagesFunction($_GET['p']);
}
我有一个menuer()函数,可以输出内容&#39;事物&#39;在链接中:
<a href='?p=$relPath'>$name</a>
虽然我可以使用不同的符号来进一步整理它...未经测试但是像这样:
if (!$_GET) homePageFunction();
elseif ($_GET) contentPagesFunction($_GET['p']);