php:$ a = $ b OR $ a = $ c vs.三元

时间:2011-06-16 20:24:46

标签: php variable-assignment ternary-operator boolean-logic assignment-operator

如果第一个变量是(bool)false或未定义,我需要使用第二个变量的值将两个变量中的一个赋值给第三个变量。

我通常使用三元表示法来执行此操作:

$foobar = ($some_prefix_and_some_variable_name) ? $some_prefix_and_some_variable_name : $bar ; 

但有时如果$ foo变量名称非常长,则不太常见,因为需要在此表示法中重复。

现在我的问题是,使用这种表示法同样好:

$foobar = $some_prefix_and_some_variable_name OR $foobar = $bar;

这个符号可以与三元版本互换吗?

5 个答案:

答案 0 :(得分:7)

在PHP 5.3中,还有一个简短的三元符号:

$foobar = $fooooooooooooooooooooooooo ?: $bar ;

答案 1 :(得分:5)

因为$foobar = $foo OR $foobar = $bar;对此进行评估:

将foo指定给foobar。
*那里有价值吗?
*如果没有,请指定foobar吧。

而另一个则评估为:

foo有值吗?
*若是,请指定foobar = foo
*否则指定foobar = bar

在第一个例子中,如果!foo你要分配两次,如果foo它可以更快。在第二个示例中,您只需设置一次总值。我打赌速度差可以忽略不计。

这里更大的问题是可读性。如果没有5.3短符号,那么我仍然会使用三元符号,只是因为其他程序员所期望的。

就此而言,使用传统的三元语法可以节省更多时间和金钱,只因为当人们看到你的代码时他们不会问自己,WTF?

答案 2 :(得分:4)

自PHP 5.3起,有一个特殊的运算符:

$foobar = $fooooooooooooooooooooooooo ?: $bar;

来自documentation on the ternary operator

  

从PHP 5.3开始,可以省略三元运算符的中间部分。如果expr1 ?: expr3评估为expr1,则表达式expr1会返回TRUE,否则会返回expr3

答案 3 :(得分:1)

就速度问题而言:

$foobar = $fooooooooooooooooooooooooo OR $foobar = $bar;

它更快

答案 4 :(得分:0)

没有。 我不确定这两个符号是否可以互换,这意味着你不应该使用第二个符号!无论它们是否实际相同,如果不能立即清楚代码的作用(如本例所示),您应该更改它,除非您完全确定没有其他人必须更新此代码。如果我看到那些写的,我不确定它是否应该是这样的,或者是否有一些错字,而且这个错误根本就没有被发现(看了太多次了!)。

理想情况下,对于非常长的变量名,您应该这样做:

if($fooooooooooooooooooooooooo){
    $foobar =$fooooooooooooooooooooooooo;
} else {
    $foobar = $bar;
}

只是为了让它易于阅读,除非速度至关重要,在这种情况下你应该使用三元运算符。