三元运算符与逻辑运算符

时间:2014-09-08 16:12:41

标签: php ternary

在任何情况下,这两者会产生不同的结果,或者一般来说,它们之间是否存在任何差异(性能等):

$r = this() ?: that();

和...

$r = this() or that(); // $r = this() || that();

假设没有区别,你建议使用哪一个?为什么?

3 个答案:

答案 0 :(得分:2)

第二个有布尔结果。第一个没有限制。

如果需要布尔值,请使用逻辑运算符。

由于代码澄清首先出现,这是微优化领域,只需忽略性能差异(如果有的话)。

答案 1 :(得分:0)

您好我建议您阅读文档,因为它全部

http://php.net/manual/en/language.operators.logical.php

http://php.net/manual/en/language.operators.precedence.php

http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

据我所知,主要区别在于优先顺序,但我发现这很少(从来没有)成为一个真正的问题,因为我从不混淆它们。即使这样,也有这个位

  

运算符优先级和关联性仅确定表达式的方式   如果已分组,则不会指定评估顺序。

如果我正确的想法只与PHP解释器如何看待它们有关,并且在用户态代码上确实没有Bering。

至于性能,影响是如此之小以至于不存在,还有许多其他事情可以对性能产生实际影响,例如数据库查询的结构和数量,在循环时缓存对象创建具有更大影响的新实例等。

我个人更喜欢在检查未设置的值和设置默认值时使用三元运算符。考虑这个例子

    if( isset( $_POST['date'] ){
            $date = $_POST['date'];
    }else{
            $date = date('Y-m-d');
    }

而是使用三元

    $date = ( isset( $_POST['date'] ) ? $_POST['date'] : date('Y-m-d');

Ternary是一个更清洁的IMO,但它确实是个人偏好的问题。

答案 2 :(得分:0)

TERNARY ,您无法使用快捷方式?:,它会将您的意义与逻辑or运算符折叠起来。

所以真正的三元运算符将是:

$r = this() ? other() : that();

现在你无法用简单的or运算符来表达这一点,这恰好是三元运算符的一个特例:

$r = this() ? this() : that();  // := this() or that()

除此之外,除了可读性之外没有任何区别,这比微小的可疑优化更重要。