我發現一些奇怪......, 我有這樣一段代碼在我的函數的末尾:短if語句
return $class == 3?"red":$class==2?"orange":$class==1?"yellow":"";
現在,當$class == 2
這將返回「黃」,而不是「橙色」像我預料的那樣。 有人可以向我解釋這個嗎?
我發現一些奇怪......, 我有這樣一段代碼在我的函數的末尾:短if語句
return $class == 3?"red":$class==2?"orange":$class==1?"yellow":"";
現在,當$class == 2
這將返回「黃」,而不是「橙色」像我預料的那樣。 有人可以向我解釋這個嗎?
由於三元運算符在PHP中是左關聯的,因此您需要使用括號。關聯性是如何「運營商相同的優先級在沒有括號分組」 - 從Operator Associativity
$class == 3?"red":($class ==2?"orange":($class ==1?"yellow":""));
我解決了它與一個數組︰$ colors =陣列( 「」, 「黃」, 「橙」, 「紅色」);返回$ colors [$ class]; – 2013-03-28 08:59:02
很好地完成;這是一個更好的方法:-) – andyb 2013-03-28 09:01:55
我只是想知道爲什麼它不工作,沒有一個不同的方法。你和@Voitcus給了我正確的答案。 – 2013-03-28 09:07:13
我絕不會喜歡的代碼吧。我相信,當你編碼時,你真的想立即看到一段代碼在做什麼。這不會做,這只是讓你頭疼;-)
也許改變它的東西明確:
switch($class) {
case 1:
return 'yellow';
case 2:
return 'orange';
case 3:
return 'red';
default:
return '';
}
使用括號:
$class = 2;
echo $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));
輸出:orange
這是因爲它是這樣對待的:
return (($class == 3?"red":$class==2)?"orange":$class==1)?"yellow":"";
所以加上括號來強制使用權:
return $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));
+1我剛剛添加到我的答案 – andyb 2013-03-28 08:58:33
其在PHP ternory運營商這是equivallent到如果else語句 – 2013-03-28 08:50:12
它是一個錯字,還是真正的代碼?缺少'$' - 在最後一堂'課堂'前面的標誌? – 2013-03-28 08:50:18
請RTFM:http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary – deceze 2013-03-28 08:51:39