可能重複:
Reference - What does this symbol mean in PHP?
To ternary or not to ternary?三元運算符在php中?
能有人請解釋的優勢/劣勢或使用三元操作符代替if/else語句的。我應該在何時何地使用每個?
可能重複:
Reference - What does this symbol mean in PHP?
To ternary or not to ternary?三元運算符在php中?
能有人請解釋的優勢/劣勢或使用三元操作符代替if/else語句的。我應該在何時何地使用每個?
三元運營商比,如果else語句更爲簡潔(這是良好的可寫性),但是當你你有一個條件,你的工作應該真的只使用它們。嵌套的三元運算符確實降低了可讀性。
一般來說,我只用三進制運算符時:
1)基於條件我指定的變量。
and
2)只有一個條件。
否則,他們會變得混亂,這使得難以維護。
例子:
$port = ($secure) ? 443 : 80;
而如果其他人將是:
if($secure){
$port = 443;
} else {
$port = 80;
}
你甚至可以做出更好的做:
$port = 80;
if($secure){
$port = 443;
}
但是你可以看到,使用簡單的三元運算符更加簡潔(因爲您可以在較少的'空間'中獲得您的想法)。
您可能會聲稱這會降低可讀性,但只會稍微降低可讀性。正如我之前所說的,不要爲這個操作符而瘋狂,因爲它會降低可讀性以至於不值得。請記住,使用編程語言是一種平衡。更可寫的用一個簡單的三元運營商,這是在編程語言的一個重要因素。
在主場迎戰可寫的可讀性 - 點,我想指出一個specfic例子。
$count++
與
$count = $count + 1 // or $count += 1
第二個例子是,大多數cerntaintly更具可讀性,你知道到底是怎麼回事,但是9/10時候,你會選擇做$count++
,因爲它簡單,更寫。
根據條件分配變量時使用三元組 – 2011-04-10 17:51:29
寫出相同條件的替代方法的良好演示。 – Charles 2011-04-10 18:10:00
關於三元運算符的兩個注意事項。首先:如果?:返回對象,那麼您最終將獲得該對象的副本而不是通過-ref賦值來解決此問題,您可以編寫$ x? $ obj = $ y:$ obj = $ z而不是$ obj = $ x? $ y:$ z。第二:?:可能會導致運營商優先級問題,因此($ x + $ y)? $ z1:$ z2總是優於$ x + $ y? $ z1:$ z2。 – 2011-04-10 19:17:15
何時使用:從來沒有。
PHP是偉大的,它的可讀性。
人們可以理解沒有語言語法的整個語句。
的通常,如果像這樣的
if($age < 18) $error = "Too young!";
語句可以理解爲幾乎純英文:
如果[給予]年齡小於18,錯誤將是「太年輕」
但你會怎麼看這樣的三元
$error = (($age < 18))? "Too young":"";
?
錯誤會年齡小於18?太年輕! [有些噪音]。
在大多數情況下,這是可怕的建議。 – 2011-04-10 18:06:20
你可以把第二個讀爲「錯誤,如果年齡小於18歲,就太年輕了」。我同意三元體系可能很醜,但是如果使用得當,它確實不難讀。只是不要將它用於除簡單賦值之外的任何事情,或者像簡單的複數形式:'($ var> 1)? 「s」:「」' – AgentConundrum 2011-04-10 18:10:08
我看不懂缺席的單詞 – 2011-04-10 18:11:46
當單個條件的結果被分配給一個變量時,三元運算符工作得很好。它可以導致一個清晰,簡潔的圖表,顯示導致變量狀態的條件,而在if/else
語句中,您需要查看至少兩行來確定結果。
$result = $condition > 5 ? "hello" : "world";
// is clearer & easier to read than
if ($condition > 5)
{
$result = "hello";
}
else
{
$result = "world";
}
在某些情況下,if/else語句可能非常麻煩。例如。比較以下兩種:
$a = (condition ? 1 : 2)
與
if (condition) {
$a=1
}
else {
$a=2
}
每個人都專注於什麼時候使用它,但它可能是值得知道什麼時候不使用它。以下是如何不是的示例使用三元運算:
$foo = $bar == 1 ? 'a' : $bar == 2 ? 'b' : 'c';
快速,當$bar
爲1,什麼是$foo
?如果你回答'a',你是錯誤!從PHP交互式提示:
php > $bar = 1; $foo = $bar == 1 ? 'a' : $bar == 2 ? 'b' : 'c'; echo $foo;
b
php > $bar = 2; $foo = $bar == 1 ? 'a' : $bar == 2 ? 'b' : 'c'; echo $foo;
b
Yikes! PHP的操作順序是破在這裏。我們必須添加parens以消除歧義:
$foo = $bar == 1 ? 'a' : ($bar == 2 ? 'b' : 'c');
這很快變得不可讀。如果你想使用運營商,只有使用它的一個條件。如果您需要if-elseif-else邏輯,請使用真正的if
塊。
*(相關)* [這是什麼符號在PHP中的意思](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Gordon 2011-04-10 17:49:52
不應該這是一個不同的堆棧或討論話題? – mcgrailm 2011-04-10 18:02:15