2013-07-08 54 views
1

我正在尋找這樣的事情:最好的辦法解決幾個類型用戶的PHP/MySQL的

<?php  
if($condition1 == 'a' && $condition2 == 'a' && $condition3 == 'a'){ 
    //echoing some HEREDOCS here 
    } 

    if($condition1 == 'a' && $condition2 == 'a' && $condition3 == 'b'){ 
    //echoing some HEREDOCS here 
    } 

    if($condition1 == 'a' && $condition2 == 'b' && $condition3 == 'a'){ 
    //echoing some HEREDOCS here 
    } 

    if($condition1 == 'a' && $condition2 == 'b' && $condition3 == 'b'){ 
    //echoing some HEREDOCS here 
    } 
?> 

我有一些7個條件和幾十個組合。我想知道這是解決每種獨特類型用戶的正確方式,還是可以有更好的方法?

HEREDOCS對於每一種組合都是完全不同的。

+1

http://codereview.stackexchange.com/ – j08691

回答

1

您可能正在尋找switch運營商。

就您的設計而言,您可能希望將每個人的文本存儲在數據庫中並將其與用戶拉起來!

1

我總是喜歡設計我的代碼以避免這種情況。儘量先定義的情況下,線性表,如:

<?php  

if($condition1 == 'a' && $condition2 == 'a' && $condition3 == 'a') $user_type = 1; 
elseif($condition1 == 'a' && $condition2 == 'a' && $condition3 == 'b') $user_type = 2; 
elseif($condition1 == 'a' && $condition2 == 'b' && $condition3 == 'a') $user_type = 3; 
elseif($condition1 == 'a' && $condition2 == 'b' && $condition3 == 'b') $user_type = 4; 

>

只是不要忘了涵蓋所有可能的組合,否則所有IFS可能會失敗,使得$user_type不確定?

以後,當你要根據用戶類型進行打印的東西,或採取任何行動,只是做一個開關/箱:

switch($user_type) 
{ 
    case 1: 
    //echoing some HEREDOCS here 
    break; 
    case 2: 
    //echoing some HEREDOCS here 
    break; 
} 

的總體思路是,以處理複雜的事情只有一次,以避免在你的代碼中複製你複雜的邏輯。

2

與串聯鑰匙開關可以是你的答案:

switch ($condition1.":".$condition2.":".$condition3){ 
    case "a:a:a": 
     //echoing some HEREDOCS here 
     break; 
    case "a:a:b": 
     //echoing some HEREDOCS here 
     break; 
    case "a:b:a": 
     //echoing some HEREDOCS here 
     break; 
    case "a:b:b": 
     //echoing some HEREDOCS here 
     break; 
} 

或者你也可以創建一個消息映射

$messages = array(
      "a:a:a"=>"Docs a:a:a", 
      "a:a:b"=>"Docs a:a:b", 
      "a:b:a"=>"Docs a:b:a", 
      "a:b:b"=>"Docs a:b:b", 
); 

echo $messages[$condition1.":".$condition2.":".$condition3];