代码之家  ›  专栏  ›  技术社区  ›  JasonDavis

是什么?在PHP 5.3中?[复制品]

  •  77
  • JasonDavis  · 技术社区  · 15 年前

    可能重复: What are the PHP operators “?” and “:” called and what do they do?

    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. 2号和 ?: 在PHP 5.3中?

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

    3 回复  |  直到 9 年前
        1
  •  129
  •   Ether    15 年前

    ?: 是条件运算符的一种形式,以前仅作为以下形式提供:

    expr ? val_if_true : val_if_false
    

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

    expr ? expr : val_if_false
    

    manual :

    由于php 5.3,可以省略条件运算符的中间部分。表情 expr1 ?: expr3 收益率 expr1 如果 ExPR1 评估为 TRUE expr3 否则。

        2
  •  35
  •   Ether    15 年前

    这个 ?: 接线员是 conditional operator (通常指三元运算符):

    表达式 (expr1) ? (expr2) : (expr3) 计算结果为 expr2 如果 expr1 评估为 真的 expr3 如果 ExPR1 评估为 错误的 .

    在以下情况下:

    expr1 ?: expr2
    

    表达式的计算结果为 ExPR1 如果 ExPR1 ExPR2 否则:

    由于php 5.3,可以省略三元运算符的中间部分。表情 expr1 ?: expr3 收益率 ExPR1 如果 ExPR1 评估为 真的 ,和 EXPR3 否则。

        3
  •  4
  •   Boldewyn    15 年前

    Look here:

    由于php 5.3,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为true,则返回expr1,否则返回expr3。

    匿名函数: 不,它们不存在 before 5.3.0 (参见示例下面的第一个注释),至少这样:

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

    唯一的办法是 create_function() 更慢、更麻烦、更容易出错(因为函数定义使用了字符串)。