省略三元运算符的第二部分

时间:2011-11-11 20:30:44

标签: php conditional-operator

给出以下表达式:

$att['menutext'] = isset($attrib_in['i_menu_text']) ? : $this->getID();

如果评估为true,$att['menutext']会设置为true还是$this->getID()

5 个答案:

答案 0 :(得分:14)

根据this reference

  

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

答案 1 :(得分:2)

它与以下

相同

$att['menutext'] = isset($attrib_in['i_menu_text']) ? true : $this->getID();

答案 2 :(得分:2)

是的,在5.3+版本中,中间表达式是可选的,并返回true。

$a = (true ? : 1); // $a evaluates to true.
$a = (false ? : 1); // $a evaluates to 1.

答案 3 :(得分:1)

之前从未测试过,但它很容易测试:

<?php var_dump(TRUE ? : 'F'); ?>

及其说:bool(true)

答案 4 :(得分:0)

这不会执行,它是 PHP&lt;的无效语法5.3 即可。

Parse error: syntax error, unexpected ':' on line X

如果要将值设置为true,则使用true:

$att['menutext'] = isset($attrib_in['i_menu_text']) ? true : $this->getID();

或者您可能更有可能:

$att['menutext'] = isset($attrib_in['i_menu_text']) ? $attrib_in['i_menu_text'] : $this->getID();