什么是?在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以来的一些新function:

  1. DIR常数
  2. ?:运算符
  3. 匿名function

  1. 在PHP5.3中,2号是做什么的?

  2. 另外,匿名函数是什么意思? 那不是有一段时间了?

?:是以前仅以如下forms提供的条件运算符的一种forms:

 expr ? val_if_true : val_if_false 

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

 expr ? expr : val_if_false 

从手册 :

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

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

expression式(expr1) ? (expr2) : (expr3) (expr1) ? (expr2) : (expr3)如果expr1值为TRUE(expr1) ? (expr2) : (expr3)值为expr2如果expr1值为FALSE ,则expr3

如果是:

 expr1 ?: expr2 

如果expr1true ,则expression式求值为expr1 ,否则为expr2

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

看这里:

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

匿名函数:不,它们在5.3.0之前不存在(参见下面的例子中的第一个注释),至less是这样的:

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

唯一的办法是create_function() ,它比较慢,相当麻烦和容易出错(因为函数定义使用string)。