Php 检查是否在switch语句中设置了数组字段
我设置了一个Php 检查是否在switch语句中设置了数组字段,php,arrays,switch-statement,Php,Arrays,Switch Statement,我设置了一个switch语句,用于检查数组字段中的值。如果数组没有具有该名称的字段,我还希望执行稍微不同的逻辑 我可以这样写代码,这很有效,但在我看来有点混乱: if (!isset($_GET['action'])) { require('menu.html'); } else { switch ($_GET['action']) { case 'debug': require('core/actions/debug.php');
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
语句中移动逻辑,并将其与我的开关
逻辑相结合
在JavaScript中,我可以将未定义的情况作为一种情况来处理:…。我可以在PHP中执行类似的操作吗?如果
$\u GET['action']
为空,或者确实有值,但不是您想要的值,则可以执行此操作
switch ($_GET['action'])
{
.............
case "":
echo "empty or not setted";
break;
}
但是,如果未设置$\u GET['action']
,它将在每次比较时抛出通知(但无论如何,它都将进入案例“”
)
要不显示通知,可以执行以下操作:
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处理这种情况的最佳方法是做您已经在做的事情(在开关之前检查var是否为空
或设置
。.case
)
这个问题很有趣,但如果是我,我会原封不动地离开,因为它可以很好地处理if/else语句。可能没有那么漂亮,但也不太复杂。啊,对了,我想在我的示例中使用
isset()
,而不是empty()
。实际上,你可以将“超级开关疯狂方式”做得更好一点:@IQAndreas great way,添加到答案中。这一切都归功于你!
if (isset($_GET['action'])){
switch ($_GET['action'])
{
.............
case "":
echo "empty";
break;
}
} else {
echo "not setted";
}