在任何情况下,这两者都可能产生不同的结果,或者通常情况下,它们之间是否存在任何差异(性能等):
$r = this() ?: that();
而且。。。
$r = this() or that(); // $r = this() || that();
假设没有区别,你会建议使用哪一种,为什么?
第二个有一个布尔结果。第一个没有限制。
如果需要布尔值,请使用逻辑运算符。
由于代码澄清是第一位的,这是微观优化领域,因此忽略性能差异(如果存在)。
要成为TERNAY,您不能使用快捷方式?:
,它会用逻辑or
运算符折叠含义,如您所示。
因此一个实三元算子是:
$r = this() ? other() : that();
现在你不能用简单的or
算子来表达这一点,这恰好是三元算子的一个特例:
$r = this() ? this() : that(); // := this() or that()
除此之外,除了可读性之外,没有任何区别,可读性比微小的可疑优化更重要。
嗨,我建议你阅读文档,因为就在那里
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解释器如何看待它们有关,并且实际上在userland上没有Bering代码。
至于性能,影响很小,甚至不存在,还有很多其他事情会对性能产生真正的影响,比如数据库查询的结构和数量,在循环而不是创建新实例时缓存对象等等,这些都会产生更大的影响。
就我个人而言,在检查未设置的值和设置默认值时,我更喜欢使用三元运算符。考虑这个例子
if( isset( $_POST['date'] ){
$date = $_POST['date'];
}else{
$date = date('Y-m-d');
}
而是使用三元
$date = ( isset( $_POST['date'] ) ? $_POST['date'] : date('Y-m-d');
三元船比IMO干净得多,但这确实是个人喜好的问题。