三元运算符和if条件之间是否存在差异?

时间:2011-05-13 09:37:26

标签: php ternary-operator

三元运算符和php中的条件之间是否存在差异?

如果是,请提供。

6 个答案:

答案 0 :(得分:10)

三元运算符是运算符,因此它形成一个表达式。因此,它将具有一个值,您可以将其分配给变量或使用您想要的值。它用于简单的情况,其中变量可以根据条件采用两个可能的值。

例如:$status = $age > 18 ? 'adult' : 'child';

尽管可能,you should not nest the ternary operator

控制结构 if完全不同。他们唯一的共同点就是评估一个条件(真/假)。 if用于根据该条件的结果执行代码片段。您会发现自己大部分时间都在使用if(实际上,您可以在没有三元的情况下生活)。在某些情况下,如果用三元组替换某些类型的if s,代码更少,更具可读性,如下所示:

if ($age > 18) {
    $status = 'adult';
} else {
    $status = 'child';
}

答案 1 :(得分:1)

就个人而言,我只使用三元运算符,如果它适合一行。如果它需要跨越,那么现在是时候了好的

 $value = ($a < 0) ? 'minus' : 'plus';

你也可以看到一个有趣的问题:多个三元如何工作:

unusual ternary operation

答案 2 :(得分:1)

如果陈述比三元更快,但在大多数情况下并不重要。

Here是关于If语句与三元表现的帖子。 简介:除非您正在评估大型对象,否则它基本相同,因为三元复制正在评估的对象。这是使用PHP 5.3我不确定它是否在当前版本中被更改。

答案 3 :(得分:0)

三元运算符可以执行if / else语句可以执行的任何操作。在某些情况下,它可以提供简洁和表达,但要注意:它很容易被滥用。

我喜欢它的一件事是检查null:

$foo = (is_null($bar)) ? 0 : $bar->someNumber();

如果我的PHP内存正确地为我服务,那么它也可以在左值上使用:

((is_null($foo)) ? $bar : $foo) = $quux;

虽然很容易过度,例如在这个C ++示例中,它用于代替循环和if / else语句:

while( ( ! printingStars) ?
     ( ( ! reachedMax) ?
       ( ( ++numberOfStars == n - 1) && (reachedMax = 1) )
       : --numberOfStars ), printingStars = 1, starsLeft = numberOfStars
     : ( ( ! starsLeft ) ?
         printingStars = 0, (std::cout<< std::endl), 1
         : --starsLeft, (std::cout<< "*"), 1 ) );

谨慎使用。

答案 4 :(得分:0)

也许另一种观点:表现。

前段时间我注意到三元运算符比if()更快。我不知道这是否仍然适用于最新版本的PHP。

&LT;狂野猜测&gt;
原因可能是if()允许更灵活,例如使用代码块({ })。三元运算符基本上只是测试表达式并根据测试结果获取值。

回到我的Assembler-days,我会说if()必须跳入内存,因此需要花费更多时间来做事。
&LT; / wild guess&gt;

但是,只有在代码执行了相当数量(1k +)的情况下,这才会变得明显。

答案 5 :(得分:-1)

如果你不使用任何简单的逻辑,那么维护就会有很大的不同。

如果您遇到一个困难的问题,那么在需要更多时间的情况下,您需要进行编程,就好像您的代码中有“if ... then”一样。并且确定:它发生了!

时间不是三元运营商的朋友。如果岁月不见了,写得快,但不能快速理解!