2016-12-15 67 views
0

我寫來檢查,如果每個項目作爲一個屬性分配之前滿足特定條件的類中的foreach循環財產申報三元比較,但是我想過用這種三元比較。使用只有當真正

原來,下面的代碼工作得很好:

$res = []; 
$config = [ 
    'red' => 'RED', 
    'magenta' => 'MAGENTA', 
    'blue' => 'BLUE', 
    'lilac' => 'LILAC' 
]; 
$allowed = ['red', 'green', 'blue']; 

foreach($config as $name => $value) { 
    in_array($name, $allowed) ? $res[$name] = $value:''; 
} 

print_r($res); 

它返回:

Array 
(
    [red] => RED 
    [blue] => BLUE 
) 

現在的問題是,這是三元的比較有效的使用?或者這只是一個錯誤?現在代碼看起來更簡單了,但我不想使用可能在未來「修復」的內容。

回答

0

這是有效的代碼。三元的語法是:

<condition> ? <then-expression> : <else-expression> 

賦值是一種類型的表達,所以它允許<then-expression>。一個文字字符串也是一個有效的表達式。

而且任何表達是允許的一份聲明中,所以你可以使用一個三元不分配的結果作爲任何聲明。

但我認爲大多數程序員會考慮這種可憐的風格。三元組的目的是提供一個簡明的方法來在需要該值的地方使用條件表達式,以避免重複周圍的代碼。

$var = isset($var1) ? $var1 : ''; 

,而不是

if (isset($var1)) { 
    $var = $var1; 
} else { 
    $var = ''; 
} 

如果你不使用的價值,有沒有冗餘來避免,所以沒有理由使用三元以外試圖顯得聰明或保存幾行。

0

你最好不要只用if語句,因爲你並不真的需要一個else語句/塊。

但是,如果你正在寫的生產代碼,並一切正常,因爲它應該和它傳遞的代碼審查(如果你有這些)你提供適當的單元測試中,它可能永遠不會最終被固定在未來

別人
+0

感謝您的答覆,通過「固定」我的意思是,這種行爲(如果不希望它)可能在PHP的未來版本中改變。 –