一行代码说了很多话:
$foo = false;
$bar = $foo ? $foo : 'bar';
/* $bar == 'bar' */
$foo = 'foo';
$bar = $foo ? $foo : 'bar';
/* $bar == 'foo' */
是否有更快的方式说“如果某些事情不是假的,那么就不要改变它(如果$foo
不是false
那么它会保持原样,否则,我们会改变它吗?“
答案 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为假,否则它确实没有任何作业。