85

可能重复: 什么是 PHP 运算符“?” 和“:”调用,他们做什么?

来自http://twitto.org/

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

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

  1. DIR常数_
  2. 运营商
  3. 匿名函数

  1. 在 PHP 5.3中,数字 2 对?:有什么作用?

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

4

3 回答 3

140

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

expr ? val_if_true : val_if_false

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

expr ? expr : val_if_false

手册

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

于 2010-01-28T08:36:39.880 回答
36

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

表达式的(expr1) ? (expr2) : (expr3)计算结果为expr2ifexpr1计算结果为TRUEexpr3ifexpr1计算结果为FALSE

如果是:

expr1 ?: expr2

该表达式的计算结果为expr1ifexpr1expr2否则为:

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

于 2010-01-28T08:38:18.820 回答
5

看这里:

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

匿名函数:不,它们在 5.3.0 之前不存在(参见示例下方的第一个注释),至少以这种方式:

function ($arg) { /* func body */ }

唯一的方法是create_function(),它更慢,非常麻烦且容易出错(因为使用字符串进行函数定义)。

于 2010-01-28T08:38:22.730 回答