2016-02-05 125 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