2011-09-10 16 views
1

以下のクラスを使用して、Webアプリケーションでphpのすべてのリクエストをルーティングします。これを改善することはできますか?/else文を使用すると、特定の条件の評価を設定することができます場合は、スイッチ/ケースは、あなただけはスイッチ、すなわち変数が取り得るいくつかの特定の値を(設定することができますしながら、ルーティングクラスを改善する*

/*route*/ 

class route 
    { 
    function __construct($a) 
    { 
    if(isset($_FILES['ufile']['tmp_name'])) // handles file uploads 
     { 
     new upload(); 
     } 
    elseif(isset($_POST['a'])) // handles AJAX 
     { 
     $b=$_POST['a']; 
     switch($b) 
     { 
     case '0': 
      new signin(); 
      break; 
     case '1': 
      new signup(); 
      break; 
     case '2': 
      session::finish(); 
      break; 
     case '3': 
      new bookmark('insert'); 
      break; 
     case '3a': 
      new bookmark('delete'); 
      break; 
     case '4': 
      new tweet(); 
      break; 
     default: 
      echo "ajax route not found"; 
      break; 
     } 
     } 
    elseif($a!=0) // handles views 
     { 
     new view($a); 
     } 
    else 
     { 
     // route not found 
     } 
    } 
    } 

検証、

/*ROUTE 
// Test Code - create entry 
    new route(0); 
    new route(1); 
    $_FILES['ufile']['tmp_name']='test file'; 
    new route(0); 
    unset($_FILES['ufile']['tmp_name']); 
    $_POST['a']=0; 
    new route(0); 
// Test Cases 
    // Case 0:  echo "not routed: <br>"; 
    // Case 1:  echo "view created: $a <br>"; 
    // Case 2:  echo "file uploaded <br>"; 
    // Case 3:  echo "ajax responded: <br>"; 
*/ 
+0

...もっとスペースを入れてください – genesis

+0

javascriptがありません。私はそのインデントを意味します... – genesis

答えて

1
public static function route($a) 
    { 
    // The first if statement is redundant this line will accomplish the 
    // same as the if/else because if post[a] is not set it will become null 
     $b=$_POST["a"]; 
    // now that b is a, it's really one switch statement 
    if($b==0 && $a==0) 
     switch($b) 
     { 
     case '0': 
      new signin(); 
      break; 
     case '1': 
      new signup(); 
      general::upload(); 
      break; 
     case '2': 
      session::finish(); 
      break; 
     case '3': 
      new bookmark('insert'); 
      break; 
     case '3a': 
      new bookmark('delete'); 
      break; 
     case '4': 
      new tweet(); 
      break; 
     default: 
      view::posts_all(); 
      break 
     } 
    }elseif($a==1) 
     view::bookmarks(); 
    else 
     view::posts_all(); 

のルートは、外出先、幸運ことを与えています。 (A side note:数字の場合の引用符は省略可能ですが、3aはそうではありません。元のものなので、そこに置いておきました)$ bを完全に取り除き、 _POST ['a'])

+0

それはそれが遅くなっている私のせいです。元の応答に$ aを含めるように編集しました。私は精神的に$ _POST ['a']と組み合わせました。ごめんなさい。 – Adam

+0

鮮明なサイトです。良くやった。 – Adam

+0

$ b = isset($ _ POST ['a'])? $ _POST ['a']:null; – Adam

0

(合格) /場合は$b > 10のようなものを言うことはできません)。 それ以外は、if/elseやswitch/caseに大きな違いはありません。

$bと定数のグループを単に比較しているので、スイッチ/ケース構成を使用することをお勧めします。
また、時期尚早な最適化を覚えているすべての悪 :)

+1

@Chris Aaker:あなたは**何を最適化していますか? 'if'を' case' **に置き換えることは**最適化ではありません。あなたのコードはゆっくりと動作しますか?あなたはそれをプロファイリングしましたか? – zerkms

+0

@Chris Aaker:スイッチ/ケースの代わりにif/elseを使用するのはおそらく、ソフトウェアのボトルネックではないので、本当に必要な場所でコードを最適化する方がいいでしょう。 – Saphrosit

+0

ボトルネックはありません...私は何が起こりたいのかを伝えるために正しい言語機能を使用しようとしています。おそらく、最適化の代わりに改善という言葉を使用していたはずです。私はその質問を否定した。ありがとうございました。 –

関連する問題