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,但这不是我的意思。不可能?