我遇到了这种语法:var == "" ? "-" : var。有人能解释一下吗?

3
代码是这个:
$vendors[] = array(
    "id" => $row['vendorID'],
    "name" => $row['name'] == "" ? "-" : $row['name'],
    "tel1" => $row['phone1'] == "" ? "-" : $row['phone1'],
    "tel2" => $row['phone2'] == "" ? "-" : $row['phone2'],
    "mail" => $row['email'] == "" ? "-" : $row['email'],
    "web" => $row['web'] == "" ? "-" : $row['web']);

请问有人能够准确地解释一下这是什么吗?看起来像是替代语法,但我没有找到相关信息。

谢谢

5个回答

24
这是一个三元运算符
表达式(expr1) ? (expr2) : (expr3)的计算结果为expr2,如果expr1的值为TRUE,否则为expr3

2
值得一提的是,三元运算符并不仅限于PHP - 请参阅http://en.wikipedia.org/wiki/Ternary_operation。 - Dror

4
这意味着:如果值为空(""),则将其设置为“-”(连字符),否则将其设置为原来的值。只需将a?b:c读作“如果a则b否则c”。

3

是的,其他人说的没错,但从代码可读性来说并不推荐这样做。请谨慎使用,不要在条件周围没有括号的情况下使用。

$myvar = ($condition == TRUE) ? $valueIfTrue : $valueIfFalse;

替代

if ($condition)
{
    $myvar = $valueIfTrue;
}
else
{
    $myvar = $valueIfFalse;
}

1

0

你也可以这样做:"name" => $row['name'] == "" ?? "-"

即 a == b ?? c,所以如果 a=b 为真,则使用 a,否则使用 c。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接