【问题标题】:Optimising a PHP If/Else statement优化 PHP If/Else 语句
【发布时间】:2011-05-18 17:31:30
【问题描述】:

我正在尝试优化以下 PHP If/Else 语句。我可以重写代码以使用caseswitch,还是应该保持原样,还是什么?

代码:

if(empty($_GET['id'])){
    include('pages/home.php');
}elseif ($_GET['id'] === '13') {
    include('pages/servicestatus.php');
}elseif(!empty($_GET['id'])){
    $rawdata = fetch_article($db->real_escape_string($_GET['id']));
    if(!$rawdata){
        $title = "";
        $meta['keywords'] = "";
        $meta['description'] = "";
    }else{
        $title = stripslashes($rawdata['title']);
        $meta['keywords'] = stripslashes($rawdata['htmlkeywords']);
        $meta['description'] = stripslashes($rawdata['htmldesc']);
        $subs = stripslashes($rawdata['subs']);
        $pagecontent = "<article>" . stripslashes($rawdata['content']) . "</article>";
    }
    include("includes/header.php");
    echo $pagecontent;
    if(!$rawdata){
        error_404();
    }
}

谢谢

【问题讨论】:

    标签: php optimization case if-statement


    【解决方案1】:

    您可能希望考虑将代码分解为 MVC 形式;这将使您的代码更容易维护。至少将最后一个子句放入另一个文件,可能称为default.phpinclude 它。此外,您可以创建一个 id => 文件键/值集数组,查找 id 并包含文件。

    if (isset($_GET['id'])) {
        $pages = array(
            0 => 'home.php',
            13 => 'servicestatus.php'
        );
        if (isset($pages[$_GET['id']])) {
            include('pages/' . $pages[$_GET['id']]);
        } else {
            include('pages/default.php');
        }
    }
    

    【讨论】:

    • 尽我所能,代码是内容管理系统的一部分,大部分内容是动态的。 :(
    【解决方案2】:

    嗯,我认为没有必要切换到交换机 但你可以改变

    } elseif (!empty($_GET['id'])) {
    

    只是

    }else{
    

    【讨论】:

      【解决方案3】:

      switch 如果您要检查的 $_GET['id'] 有多个离散值,则将是合适的。

      为了便于阅读,我可以提出一个建议

      } elseif (!empty($_GET['id'])) {
      

      只需要

      } else {
      

      【讨论】:

        【解决方案4】:

        是的,switch 只计算一次,比if elseif 高效,
        并且使用这个给定的结构更容易维护

        switch ($_GET['id'])
        {
          case 13: ... break;
          case 0 : ... break;
          default: ... break;
        }
        

        【讨论】:

          【解决方案5】:

          我不知道,如果你应该,或不应该,但在这里我不会。主要原因是,至少有一个语句,你可以省略,然后,你将只有一个if-elseif-else-Statement

          if (empty($_GET['id'])) { /* code */ }
          elseif ($_GET['id'] === '13') { /* code */ }
          elseif (!empty($_GET['id'])) { /* code* }
          

          一样
          if (empty($_GET['id'])) { /* code */ }
          elseif ($_GET['id'] === '13') { /* code */ }
          else { /* code* }
          

          在之后的块中,if(!$rawdata) 语句也重复了。

          【讨论】:

          • 应该还是不应该?您应该始终尝试优化您的代码。先生,您是“英国媒体报道”的主要原因之一。
          • 1) “过早的优化是万恶之源”,2) 微优化 3) 可读代码比 hackish 代码更好 ;) 最后但同样重要的是 4) 这里没有什么可优化的 ;)我不是说,你应该从不优化,但在这里真的没关系。
          【解决方案6】:

          我讨厌 switch 语句,但老实说这是个人偏好。至于进一步优化,我建议看看某种形式的汇编语言。它会给你一些关于如何使条件语句更有效的一般想法。也就是说,它会让你对事物有不同的看法。

          if(!empty($_GET['id'])) 
              {
          
              if($_GET['id'] == '13')
              {
                  include('pages/servicestatus.php');
              }
              else
              {
                  $rawdata = fetch_article($db->real_escape_string($_GET['id']));
          
                  if (!$rawdata) {
          
                      $title = "";
                      $meta['keywords'] = "";
                      $meta['description'] = "";
                  } else {
          
                      $title = stripslashes($rawdata['title']);
                      $meta['keywords'] = stripslashes($rawdata['htmlkeywords']);
                      $meta['description'] = stripslashes($rawdata['htmldesc']);
                      $subs = stripslashes($rawdata['subs']);
                      $pagecontent = "<article>" . stripslashes($rawdata['content']) . "</article>";
                  }
          
                  include("includes/header.php");
                  echo $pagecontent;
                  if (!$rawdata) {
          
                      error_404();
                  }
              }
          } 
          else 
          {
              include('pages/home.php');
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-11-23
            • 1970-01-01
            • 2023-03-28
            • 1970-01-01
            • 2014-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多