2

普通表达式工作正常,速记不行。我在这里错在哪里?

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

谢谢

4

1 回答 1

6

尝试在第二个速记块周围使用一组额外的括号,$value = (isset($var)) ? $var : (($str !== 'string') ? $str : null);

添加了此边注...

虽然尝试将代码压缩到一行很有趣,但通常最好将其写出来以便于阅读。您的代码行很紧凑,但需要一段时间才能消化,而...

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

... 非常清楚发生了什么 - 几个月后,当您回顾您的代码时,您会感谢自己 :)

于 2016-02-05T10:46:36.897 回答