PHP 5.3 中的 ?: 是什么?

可能的重复:PHP 运算符 “?” 和 “:” 被称为什么,它们做什么?

http://twitto.org/

<?PHP
    require __DIR__.'/c.php';
    if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
        throw new Exception('Error');
    $c();
?>

Twitto 使用自 PHP 5.3 起可用的几个新功能:

  1. 目录常量
  2. ?: 运算符
  3. 匿名函数

  1. 在 PHP 5.3 中,数字 2 与 ?: 有什么关系?

  2. 另外,匿名函数是什么意思?这难道不是已经存在了一段时间的东西吗?


答案 1

?:是条件运算符的一种形式,以前只能用作:

expr ? val_if_true : val_if_false

在5.3中,可以省略中间部分,例如 这相当于:expr ?: val_if_false

expr ? expr : val_if_false

手册中:

从 PHP 5.3 开始,可以省略条件运算符的中间部分。如果计算结果为 ,则表达式返回,否则返回。expr1 ?: expr3expr1expr1TRUEexpr3


答案 2

运算符是条件运算符(通常称为三元运算符):?:

表达式的计算结果为 if,如果计算结果为 TRUE,如果计算结果为 FALSE(expr1) ? (expr2) : (expr3)expr2expr1expr3expr1

在以下情况下:

expr1 ?: expr2

表达式的计算结果为 if 为 true,否则为:expr1expr1expr2

从 PHP 5.3 开始,可以省略三元运算符的中间部分。如果计算结果为 TRUE,则返回表达式,否则返回表达式。expr1 ?: expr3expr1expr1expr3


推荐