PHP中是否有像三元运算符的短版本的PHP?

时间:2014-12-09 20:02:55

标签: java php ternary-operator

在PHP中,三元运算符的版本很短。

expr1 ? expr2 : expr3;

变为

expr1 ? : expr3;

short版本返回expr1的结果为true,expr3的结果为false。 这允许很酷的代码可以根据自己的当前状态填充变量。例如:

$employee = $employee ? : new Employee();

如果$employee == null或由于任何其他原因评估为false,则上述代码将创建new Employee();,否则$employee中的值将重新分配给自身。

我在Java中寻找类似的东西,但我找不到三元运算符的任何类似用例。所以我想问是否有这样的功能或类似的东西可以避免三元运算符的一个表达式,以减少重复。

1 个答案:

答案 0 :(得分:10)

不,没有。 (三元运算需要by definition三个操作数)

  

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

来源:The PHP Manual

就像Java中的那个,但在Java中,你需要指定两个结果:

  

三元组   if-else运算符使用三个操作数生成值依赖   关于布尔断言的真或假。它的形式是   如下: -

boolean-exp ? value1 : value2

来源:

Java specs on the ternary conditional operator

Official Java documentation

The Java.net Blogs

另请注意,与Java和其他具有类似运算符的流行语言不同,?:在PHP中是左对联的。所以这个:

<?php
$arg = "T";
$vehicle = ( ( $arg == 'B' ) ? 'bus' : 
             ( $arg == 'A' ) ? 'airplane' : 
         ( $arg == 'T' ) ? 'train' : 
         ( $arg == 'C' ) ? 'car' : 
         ( $arg == 'H' ) ? 'horse' : 
                               'feet' );
echo $vehicle;

打印horse而不是train(这是您在Java中所期望的)

来源:

http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/#operators