2010-12-01 23 views
3

以下のPHP If/Elseステートメントを最適化しようとしています。 caseswitchにコードを書き直してもいいですか、それともそのまま残すべきですか?PHP If/Elseステートメントの最適化

コード:

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(); 
    } 
} 

おかげ

答えて

2

私は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'); 
} 
2

あなたは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'); 
    } 
} 
+0

私がしたいと思うほど、コードはコンテンツ管理システムの一部であり、大部分のコンテンツは動的です。 : – bear

2

まあ、私はそれを急がせる に切り替える必要はないと思うけど、あなたが個別のいくつかを持っていた場合だけ

}else{ 
2

switchすることが適切であろうし

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

を変更することができますあなたがチェックしていた$_GET['id']の値。私は読みやすさのために作ることができます

1つの提案は

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

だけ

} else { 
1

にする必要があるということですはい、スイッチが一度に評価され、if elseif
よりも効率的であるとされこの所与の構造で維持しやすい。

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

私はあなたがすべきか、そうすべきではないと知っていませんが、ここでは私は思いません。主な理由は、あなたが省略でき、その後、あなただけの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)も複製されます。

+0

あなたはいつもあなたのコードを最適化しようとするべきです。あなたは "bloatware"の主な理由の1つです –

+1

1) "時期尚早な最適化はすべての悪の根源です"、2)マイクロ最適化3 )読み取り可能なコードはハックコードよりも優れています;)そして最後は重要なことはありません4)ここでは最適化するものはありません;)私は言いませんが、最適化する必要はありませんが、 – KingCrunch

関連する問題