2016-02-05 122 views
2

正常表達正常,速記沒有。我在哪裏錯了?php if/else速記失敗

if (isset($var)) $value = $var; 
elseif ($str !== 'string') $value = $str; 
else $value = null; 
// works just fine 

$value = (isset($var)) ? $var : ($str !== 'string') ? $str : null; 
// only returns $value = $str 

感謝

+1

嘗試用'()'包裝最後一部分,如下所示:'$ value =(isset($ var))? $ var:(($ str!=='string')?$ str:null);' – Epodax

回答

6

與一組額外圍繞第二速記塊支架的嘗試,$value = (isset($var)) ? $var : (($str !== 'string') ? $str : null);

添加了這個側面說明...

雖然它的樂趣要擠代碼整理成一行,寫出來往往更好,因此很容易閱讀。你的代碼行是緊湊,但需要一段時間來消化,而...

if (isset($var)) { 
    $value = $var; 
} 
else if ($str !== 'string') { 
    $value = $str; 
} 
else { 
    $value = null; 
} 

...非常清楚發生了什麼事 - 你會感謝自己在幾個月後,當你在你的代碼回頭:)

+0

duh!我沒有意識到,也可以嵌套shorthands,謝謝史蒂夫! – nxet

+0

@Steve:尼斯答案:) –

+0

我第二個邊注,速記是好的,但爲了可讀性避免使用它,特別是在嵌套 – Chris