【问题标题】:PHP: $_POST in switch statement a right way?PHP:$_POST 在 switch 语句中的正确方式?
【发布时间】:2013-10-28 14:42:49
【问题描述】:

我在 $_POST 方法上使用 switch 语句并且我的脚本运行正确,但我认为我的代码不正确。

这是我的代码:

<?php

switch(isset($_POST))
{
    case isset($_POST['A']):
      //do something
    break;
    case isset($_POST['B']):
      //do something
    break;
    case isset($_POST['C']):
      //do something
    break;
}

?>

我的 script 运行正常,但我认为我的 switch 语句不够 GOOD。使用 switch 语句和 $_POST 方法是否有更简单或 BETTER 的方法?

【问题讨论】:

  • Isset 返回 true 或 false,您应该为此使用 if/elseif 语句。
  • @Detention 不,这个声明很好,并且会起作用。但你必须了解它是如何工作的
  • @Detention 不要让你告诉任何关于在这里使用if的事情。你的switch更好
  • @hek2mgl:我认为您将“聪明有趣”的代码与“干净且可维护”的代码混淆了。两者是非常不同的东西。
  • P.S. isset($_POST)始终TRUE

标签: php post switch-statement


【解决方案1】:

这很可怕,但我更喜欢这个而不是 if-else-evil-chain:

switch(true)
{
    case isset($_POST['A']):
      //do something
    break;
    case isset($_POST['B']):
      //do something
    break;
    case isset($_POST['C']):
      //do something
    break;
}

【讨论】:

  • 如果-否则-邪恶?你在说什么?是的switch(true) 很傻。
  • @WesleyMurch 检查我在问题下方的评论
  • @hek2mgl 是的,我不同意。我根本没有得到“邪恶”的东西。代码清晰是目标?或者是其他东西?对我来说,这很明显这是一个见仁见智的问题。
  • @WesleyMurch 如果您暂时放弃您最初了解的有关switch 声明的内容,您将确认它最适合这项工作。比else if.. 更好。如果我们看一个真实世界的例子,优势会更明显
  • @Detention 使用有效且可以理解的方法。除了 Lajos Veres 的回答之外,这里的每个代码 sn-p 包括你的代码都做同样的事情。
【解决方案2】:

看看这个;)


if (!empty($_POST)) {

         switch ($_POST) {
        case $_POST['A']:
            #do something;
            break;
        case $_POST['B']:
            #do something;
            break;
        case $_POST['C']:
            #do something;
            break;
    }
}

【讨论】:

    【解决方案3】:

    也许你的意思是类似的?

    <?php
    
    if(isset($_POST['A'])){
     // do something
    }
    if(isset($_POST['B'])){
     // do something
    }
    if(isset($_POST['C'])){
     // do something
    }
    
    ?>
    

    (这会执行所有不同的匹配分支,而不仅仅是第一个。如果您只想执行第一个匹配的分支,请将非第一个 if 更改为 elseif。)

    【讨论】:

    • 这里有一个区别:如果所有 3 个都设置了,“做某事”将为每个运行,这与使用 break 的 OP 代码不同。
    • 我认为“某些东西”是不同的。
    • 我的意思是您需要elseif 才能获得与 OP 代码相同的功能。
    • @WesleyMurch 如果我使用 exit();die(); 它也适用于每个人,对吗?
    • @Detention 你不想要这些,它会停止整个脚本。
    【解决方案4】:

    放置switch (){ case: } 方法的好方法是:

    if (condition){
       // Do Something    
    }elseif(condition){
       // Do Something
    }elseif(condition){
       // Do Something    
    }
    

    这条链看起来很可怕,但我建议在你的独特情况下使用一些东西,或者你可以使用@lame-up-ducks 答案,但这是我个人推荐使用的

    【讨论】:

    • 通过稍微改进的格式,这对我来说似乎是最清晰、最易读的方式。它也是最少的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2017-05-13
    相关资源
    最近更新 更多