2013-05-31 10 views
0

如果有多個elseif,我該如何使用php的速記?如果速記有多個elseif,則爲php's

我知道如何做到這一點,但有幾種情況?

這是怎麼回事:

if($a == 00){ 
echo 'Clear'; 
}elseif ($a == 01) { 
echo 'Processing'; 
} elseif ($a == 10) { 
echo 'Marked for delete'; 
} 
+0

這是行不通的嗎? – JJJ

+0

它的工作原理。我試圖用if來縮寫例如:($ age> 10?($''''''''''''''''''''''''''''''')' – Norman

+0

如果你這樣做,你會後悔的 - 嵌套的三元組不直觀,並可能導致難以調試的問題,以及如果你需要改變它,你會花費數天的時間再試圖找出它的事實 –

回答

5

當然你也可以 「鏈」 三元運算符,但其導致可怕的代碼。 不要做

根據需要使用if/else,switch或可能的關聯數組。例如,你可以這樣做:

$messages = array(
    00 => 'Clear', 
    01 => 'Processing', 
    10 => 'Marked for delete', 
); 

echo isset($messages[$a]) ? $messages[$a] : null; 

在這種情況下,這會不會是在所有比ifswitch陳述更好,但它是要記住一個有用的工具。

1

你可以那樣做:

echo ($a==0 ? 'clear' : ($a==01 ? 'Processing' : ($a==10 ? 'Marked for delete' : '')));

但喬恩是正確的,不這樣做 - 你可以看到,代碼是醜陋的。

0

我認爲switch語句可能更適合於多個ELSEIF的

switch ($a) { 
    case "00": 
     break; 
    case "Clear": 
     break; 
    default: 
     break; 
} 
2

你應該NEVER做到這一點,是完全不可讀,但...

echo ($a==00?"Clear":($a== 01?"Processing":($a == 10?"Marked For Delete":""))); 
+1

這是非常可讀的格式正確。 – slebetman

+0

在我看來,這有點東西讓PHP成爲只寫語言 – Orangepill

+0

@slebetman其實看着你的文章它的工作原理......從來沒有見過它的方式....我喜歡 – Orangepill

4

switch聲明?

switch ($a) { 
    case 0: 
    echo "Clear"; 
    break; 
    case 1: 
    echo "Processing"; 
    break; 
    case 2: 
    echo "Marked for delete"; 
    break; 
} 

或者你可以使用三元運算:

echo ($a == 0 ? "Clear" : 
    ($a == 1 ? "Processing" : 
    ($a == 2 ? "Marked for delete" : ""))); 
+0

+1爲可讀的三元運算符:) –

+0

+1同上可讀性。 – Orangepill

+0

一致認爲它比大多數人寫的更具可讀性,但是如果你有很多選項,最後你會得到一串緊密的括號,這並不是很好。我仍然希望使用不同的語法來嵌套三元組。 – Spudley

0

這裏是例如三元運算符(中的if/else簡寫)

$days = ($month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 
: ($year %400 ? 28 : 29))) 
: (($month - 1) % 7 % 2 ? 30 : 31)); 
//returns days in the given month 

但是,這將是混亂的工作!

所以我更喜歡使用開關盒!

switch ($type) { 
    case 'a': 
    $type = 'Type A'; 
    break; 

    case 'b': 
    $type = 'Type B'; 
    break; 

    case 'c': 
    $type = 'Type C'; 
    break; 

    default: 
    break; 
}