一行代碼講一個極大的話讓:
$foo = false;
$bar = $foo ? $foo : 'bar';
/* $bar == 'bar' */
$foo = 'foo';
$bar = $foo ? $foo : 'bar';
/* $bar == 'foo' */
有說:「如果事情不假,那麼不改變它(如果$foo
ISN的更快的方式't false
然後它保持不變,否則,我們會改變它)「?
一行代碼講一個極大的話讓:
$foo = false;
$bar = $foo ? $foo : 'bar';
/* $bar == 'bar' */
$foo = 'foo';
$bar = $foo ? $foo : 'bar';
/* $bar == 'foo' */
有說:「如果事情不假,那麼不改變它(如果$foo
ISN的更快的方式't false
然後它保持不變,否則,我們會改變它)「?
真:那真的很短! :d然而,由於5.3它變得更短
$bar = $foo ?: 'bar';
在5.3(不是':?')中它仍然是'?:',但現在可以省略中間部分。 – Archimedix 2011-04-06 14:11:04
「更快」通過什麼指標?
就運行時而言,這個將會是從來沒有是你的瓶頸,所以不用擔心。
在清晰度方面,以下是顯然更容易閱讀:
$foo = false; // done elsewhere
$bar = $foo;
if (!$bar) { // I've assumed from your examples that
// you meant more than just "not false"
$bar = 'bar';
}
繼續...把一些括號放在那裏。 – Joe 2011-04-06 14:07:26
不是真的......只有當'$ foo' ='TRUE',否則''bar''纔會將'$ foo'賦值給'$ bar'。但是,你的例子也會修改'$ foo'。 – Archimedix 2011-04-06 14:09:08
這不等同於問題中發佈的代碼。 – 2011-04-06 14:09:19
$foo = false;
$bar = $foo ?: 'bar';
應該返回「吧
$foo = true;
$bar = $foo ?: 'bar';
應返回true;
5.3
我關心的是,你可以有一個強制轉換爲假
$age = 0;
$myAge = $age ? $age : 21; //If no age assume drinking age
值
你不會得到與直接,類型敏感比較
if ($age ==== false) {
//stuff
}
嘗試不僅認爲更快寫作而且更快的閱讀。
最終你會發現,舒適的閱讀比寫作中的這些愚蠢的技巧更重要。
同意。如果你想更快的編碼,使用你的IDE的宏功能。 – 2011-04-06 17:39:13
不知道爲什麼總是被遺忘,但也有一個Perl式的語法:
$foo = $foo or $foo = "bar";
或者在你的情況只是:
$foo or $foo = "bar";
我經常使用過多的空間,以保持它可讀。最重要的是,除非$ foo是假的,否則它確實沒有分配。
它確實比完整的三元運算符更好,它不僅更快,而且更短:'$ x = expensive_function()? expensive_function():1;'==>'$ x = expensive_function()或$ x = 1;' – biziclop 2013-09-07 17:03:17
@biziclop也許你的意思是'$ x = expensive_function()?:1'?因爲你的解決方案總是返回一個布爾值,這可能不是你想要的。 – KingCrunch 2013-10-27 03:08:36
與...相比...... if語句? – Brad 2011-04-06 14:06:07
「更快」不是在執行速度方面,而是在編碼方面我想呢? – 2011-04-06 14:07:01
定義「更快」 – 2011-04-06 14:07:20