在任何情况下,这两者会产生不同的结果,或者一般来说,它们之间是否存在任何差异(性能等):
$r = this() ?: that();
和...
$r = this() or that(); // $r = this() || that();
假设没有区别,你建议使用哪一个?为什么?
答案 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()
除此之外,除了可读性之外没有任何区别,这比微小的可疑优化更重要。