我设置了switch
语句,用于检查数组字段中的值。如果数组没有具有该名称的字段,我还想执行稍微不同的逻辑。
我可以编写像这样的代码,但这看起来有些混乱:
if (!isset($_GET['action']))
{
require('menu.html');
}
else
{
switch ($_GET['action'])
{
case 'debug':
require('core/actions/debug.php');
break;
case 'submit':
require('core/actions/submit.php');
break;
case 'admin':
header("Location: /login");
break;
}
}
但我是否可以从if
语句中移出逻辑并将其与我的switch
逻辑相结合?
在JavaScript中,我只能将case undefined: ...
作为其中一个案例。我可以在PHP中做类似的事情吗?
答案 0 :(得分:0)
如果$_GET['action']
为空,或者确实有值,但它不是您想要的任何值,则可以执行此操作。
switch ($_GET['action'])
{
.............
case "":
echo "empty or not setted";
break;
}
但如果未设置$_GET['action']
,则会在每次比较时抛出通知(但无论如何都会输入case ''
)。
不显示您可以执行的通知:
switch (@$_GET['action'])
但是,请不要这样做!
你也可以采用超级开关疯狂的方式:
switch(true){
case !empty($_GET['action']):
switch ($_GET['action'])
{
.............
}
break;
default:
echo "not setted or empty";
break;
}
编辑:
正如@IQAndreas在评论中指出的那样,利益解决方案可能是:
switch (true)
{
case (!isset($_GET['action']):
require('menu.html');
break;
case ($_GET['action'] == 'debug'):
require('core/actions/debug.php');
break;
case ($_GET['action'] == 'submit'):
require('core/actions/submit.php');
break;
case ($_GET['action'] == 'admin'):
header("Location: /login");
break;
}
但IMO处理这种情况的最佳方式是做你正在做的事情(在empty
之前检查var是setted
还是switch..case
if (isset($_GET['action'])){
switch ($_GET['action'])
{
.............
case "":
echo "empty";
break;
}
} else {
echo "not setted";
}