我正在用PHP设计一个半基本的工具,我有更多的经验服务器端,而不是PHP。
我的工具包含10-15页,我使用$_GET参数在它们之间进行导航。
在我的代码中,有许多if语句如下所示:
if(isset[param1] && !isset[param2] && .....&& !isset[paramN]){
// code
}你会同意我的观点,这很丑,对吧?
这是PHP中的“我们是如何做到的”吗?或者在PHP网站中是否有某种导航的设计模式/功能?
编辑:更清楚的是,我想知道的是:设计导航的正确方法是使用大量的$_GET变量吗?
发布于 2016-01-03 10:02:23
实际上,这个问题的解决方案有点复杂,乍看之下可能有点复杂。您需要为此实现一个处理程序,因为您正在寻找一种处理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/? (?-意思是可选的)。
发布于 2016-01-03 09:22:20
为了避免一个巨大的if else语句,请尝试使用switch语句:
$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变量进行导航,这是正常的。
发布于 2016-01-03 09:20:08
这是我的建议:在数组中添加条件,而不是使用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相同。
https://stackoverflow.com/questions/34574883
复制相似问题