2011-04-06 39 views
2

一行代碼講一個極大的話讓:

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

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

有說:「如果事情不假,那麼不改變它(如果$foo ISN的更快的方式't false然後它保持不變,否則,我們會改變它)「?

+0

與...相比...... if語句? – Brad 2011-04-06 14:06:07

+0

「更快」不是在執行速度方面,而是在編碼方面我想呢? – 2011-04-06 14:07:01

+1

定義「更快」 – 2011-04-06 14:07:20

回答

10

真:那真的很短! :d然而,由於5.3它變得更短

$bar = $foo ?: 'bar'; 
+0

在5.3(不是':?')中它仍然是'?:',但現在可以省略中間部分。 – Archimedix 2011-04-06 14:11:04

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'; 
} 
+0

繼續...把一些括號放在那裏。 – Joe 2011-04-06 14:07:26

+0

不是真的......只有當'$ foo' ='TRUE',否則''bar''纔會將'$ foo'賦值給'$ bar'。但是,你的例子也會修改'$ foo'。 – Archimedix 2011-04-06 14:09:08

+0

這不等同於問題中發佈的代碼。 – 2011-04-06 14:09:19

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

應該返回「吧

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

應返回true;

5.3

0

我關心的是,你可以有一個強制轉換爲假

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

你不會得到與直接,類型敏感比較

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

嘗試不僅認爲更快寫作而且更快的閱讀。
最終你會發現,舒適的閱讀比寫作中的這些愚蠢的技巧更重要。

+1

同意。如果你想更快的編碼,使用你的IDE的宏功能。 – 2011-04-06 17:39:13

0

不知道爲什麼總是被遺忘,但也有一個Perl式的語法:

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

或者在你的情況只是:

$foo or $foo = "bar"; 

我經常使用過多的空間,以保持它可讀。最重要的是,除非$ foo是假的,否則它確實沒有分配。

+0

它確實比完整的三元運算符更好,它不僅更快,而且更短:'$ x = expensive_function()? expensive_function():1;'==>'$ x = expensive_function()或$ x = 1;' – biziclop 2013-09-07 17:03:17

+0

@biziclop也許你的意思是'$ x = expensive_function()?:1'?因爲你的解決方案總是返回一個布爾值,這可能不是你想要的。 – KingCrunch 2013-10-27 03:08:36

相關問題