我有這樣的:PHP速記問題
$color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread';
然而這是錯誤的。如果$status
不是3 - 它仍然返回'刪除'
有什麼問題?我應該使用else if
而不是簡寫嗎?
謝謝。
我有這樣的:PHP速記問題
$color = $status == 1 || $status == 2 ? 'read' : 'unread' || $status == 3 ? 'delete' : 'unread';
然而這是錯誤的。如果$status
不是3 - 它仍然返回'刪除'
有什麼問題?我應該使用else if
而不是簡寫嗎?
謝謝。
你想得到什麼結果?我假設你想:
讀
$顏色=($狀態== 1)? 'read': ($ status == 3)? '刪除': '未讀'
(這是出於某種原因,沒有顯示我的換行符)
爲了增強可讀性,但是,我會使用任何if/else
或switch
:
switch ($status) {
case 1: $color = 'read'; break;
case 3: $color = 'delete'; break;
default: $color = 'unread';
}
一般情況下,我不使用'?:'形式,除非我會獲得巨大的改進;通常,更可讀性更好。
1)||不是100%等於或諸如& &不是100%等於與
2)使用括號
P.S:是的,用「如果...否則」 - 它會增加代碼的可讀性。
感謝我有括號 – Kyle 2011-04-02 22:01:20
解決它,你可以在你的第一個點擴大? – 2011-04-02 22:03:33
當然:&&和||比AND和OR具有更高的優先級。 http://www.php.net/manual/en/language.operators.php#43111 – Chvanikoff 2011-04-02 22:09:56
我會說不要這樣做的簡寫 - 在你忘記自己在做什麼或者其他人出現的三天時間裏,longhand會更容易閱讀。
固定括號謝謝Chvanikoff。
$color = ($status == 1 || $status == 2) ? 'read' : ('unread' || $status == 3 ? 'delete' : '');
三元運算符具有古怪的綁定。
而且你可以使用地圖來代替:
$map = array(0=>"unread", 1=>"unread", 2=>"read", 3=>"delete");
$color = $map[ min(3,$status) ]; // min is actually the max value here
我從來沒有在PHP中使用開關。我將收回我對我的回答'$ color = $ status == 1 ||的評論$ status == 2? 'read':('unread'|| $ status == 3?'delete':'unread');'並且因爲您的權利而進入開關。 – Kyle 2011-04-02 22:02:54