更快$ foo? $ foo:'bar'

时间:2011-04-06 14:03:56

标签: php ternary-operator

一行代码说了很多话:

$foo = false;
$bar = $foo ? $foo : 'bar';
/* $bar == 'bar' */

$foo = 'foo';
$bar = $foo ? $foo : 'bar';
/* $bar == 'foo' */

是否有更快的方式说“如果某些事情不是假的,那么就不要改变它(如果$foo不是false那么它会保持原样,否则,我们会改变它吗?“

6 个答案:

答案 0 :(得分:10)

真的:那真的很短! :D然而,自5.3以来它变得更短

$bar = $foo ?: 'bar';

答案 1 :(得分:7)

不仅要考虑更快的写作,还要考虑更快的阅读 最后,你会发现舒适的阅读比写作中的这些愚蠢的技巧更重要。

答案 2 :(得分:2)

$foo = false;
$bar = $foo ?: 'bar';

应该返回'bar

$foo = true;
$bar = $foo ?: 'bar';

应该返回true;

AS of 5.3

答案 3 :(得分:1)

“更快”的指标是什么?

就运行时而言,永远不会成为你的瓶颈,所以不要担心。

就易读性而言,以下内容显然更容易阅读:

$foo = false; // done elsewhere

$bar = $foo;
if (!$bar) {  // I've assumed from your examples that
              // you meant more than just "not false"
   $bar = 'bar';
}

答案 4 :(得分:0)

我担心的是你可能会有一个值为false的值

$age = 0;
$myAge = $age ? $age : 21; //If no age assume drinking age

你不会通过直接的,类型敏感的比较获得

if ($age ==== false) { 
  //stuff
}

答案 5 :(得分:0)

不确定为什么总是被遗忘,但也有Perl-esque语法:

$foo = $foo   or   $foo = "bar";

或者只是在你的情况下:

$foo   or   $foo = "bar";

我经常使用过多的空格来保持其可读性。最重要的是,除非$ foo为假,否则它确实没有任何作业。