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

Php 省略三元运算符的第二部分,php,conditional-operator,Php,Conditional Operator,给出以下表达式: $att['menutext'] = isset($attrib_in['i_menu_text']) ? : $this->getID(); 如果它的计算结果为true,是否将$att['menutext']设置为true或$this->getID()?如下所示 $att['menutext']=isset($attrib\u in['i\u menu\u text'])?true:$this->getID(); 这将不会执行,这对于PHPget('id'、'user

给出以下表达式:

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

如果它的计算结果为true,是否将
$att['menutext']
设置为
true
$this->getID()

如下所示

$att['menutext']=isset($attrib\u in['i\u menu\u text'])?true:$this->getID();

这将不会执行,这对于PHP<5.3是无效语法

分析错误:语法错误,意外“:”在第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();
根据:

由于PHP5.3,可以省略 三元运算符。表达式expr1?:expr3在以下情况下返回expr1 expr1的计算结果为TRUE,expr3的计算结果为TRUE


以前从未测试过,但测试起来很容易:

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


它说:bool(true)

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

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

这不会执行,它的语法无效<代码>解析错误:语法错误,意外的“:”在第X行不是在PHP5.3中。这就解释了为什么它在5.2.5上不起作用:)只是为了向路人澄清一下,这个ternery操作符的快捷版本返回条件的值,而不仅仅是布尔
true
。在这种情况下,条件的计算结果将为
true
。但是如果你有
$foo=42?:虚假的
$foo
将被分配到
42
。我特别印象深刻的是,这个答案和评论实际上回答了我想问的问题,也回答了我问的问题。这个答案是不正确的,没有隐含的
isset
。只是为了向路人澄清一下,ternery运算符的这个快捷版本返回条件的计算结果,而不仅仅是每个实例中的布尔值
true
。在这种情况下,条件的计算结果将为
true
。但是如果你有
$foo=42?:虚假的
$foo
将被分配
42
。有没有办法将第一个表达式作为第二个或第三个表达式的结果使用?像
$db->get('id'、'users'、'id'、$id')?上一个查询:其他任何内容
。现在您必须编写
$db->get('id','users','id',$id')$db->get('id'、'users'、'id'、$id):还有什么吗
。向数据库发出两个请求。你可以在那之前把它保存到vars,但这不是我的意思。不可能?