PHP语法问题:问号和冒号是什么意思?

64 php syntax ternary-operator

可能重复:
快速php语法问题

return $add_review ? FALSE : $arg;
Run Code Online (Sandbox Code Playgroud)

问号和冒号是什么意思?

谢谢

Pau*_*xon 135

这是PHP 三元运算符(也称为条件运算符) - 如果第一个操作数计算为true,则计算为第二个操作数,否则计算为第三个操作数.

可以将其视为可以在表达式中使用的"if"语句.在制作取决于某些条件的简明分配时非常有用,例如

$param = isset($_GET['param']) ? $_GET['param'] : 'default';
Run Code Online (Sandbox Code Playgroud)

还有一个简写版本(在PHP 5.3以后).你可以省略中间操作数.如果为真,则运算符将评估为第一个操作数,否则为第三个操作数.例如:

$result = $x ?: 'default';
Run Code Online (Sandbox Code Playgroud)

值得一提的是,上面的代码在使用ie $ _GET或$ _POST变量时会抛出未定义的索引通知并防止我们需要使用更长的版本,isset或者在PHP7中引入一个null合并运算符:

$param = $_GET['param'] ?? 'default';
Run Code Online (Sandbox Code Playgroud)

  • 从PHP 5.3开始,也可以省略三元运算符的中间部分.表达式`expr1?:expr3`如果`expr1`计算结果为TRUE则返回`expr1`,否则返回`expr3`. (14认同)

小智 17

它是if-else运算符的三元形式.上面的陈述基本上是这样的:

if ($add_review) then {
    return FALSE; //$add_review evaluated as True
} else {
    return $arg //$add_review evaluated as False
}
Run Code Online (Sandbox Code Playgroud)

有关PHP中三元运算的更多详细信息,请参见此处:http://www.addedbytes.com/php/ternary-conditionals/