2013-04-17 58 views
-2

自從一年左右我在我的所有項目中都有一個函數,名爲:ifNot()PHP IF [FALSE/NULL/EMPTY]功能

此功能不知何故從三元運算符推導:

public function ifNot($item, $ifNot) 
{ 
    if (!$item) { 
     return $ifNot 
    } else { 
     return $item; 
    } 
} 
// The var $foo twice 
$var = ($foo) ? $foo : 'is empty or false =('; 
// The var $foo once 
$var = ifNot($foo, 'is empty or false =('); 

事實上,嫩枝模板引擎使用類似的東西:

{{ foo ? 'yes' : 'no' }} 

{# as of Twig 1.12.0 #} 
{{ foo ?: 'no' }} == {{ foo ? foo : 'no' }} 
{{ foo ? 'yes' }} == {{ foo ? 'yes' : '' }} 

的問題是:有一個更好的/已知這個功能的方法?

PS:SQL還具有IFNULL() =)

+1

這就是我們所說的絕對毫無意義的功能!它做了一件你可以輕鬆做到的事情,而不需要額外的函數調用,而且它更容易閱讀? – adeneo

+0

是的,我問這個問題尋找替代品=) –

回答

4

你的功能基本上等同於a variant of the conditional operator that was added in PHP 5.3

辛格在PHP 5.3中,可以省略三元運算符的中間部分。表達表達式1:表達式3回報表達式1如果表達式1評估爲TRUE,並表達式3否則。

如果您的所有目標環境都是PHP 5.3或更高版本,使用內置方法可能會稍快一點,但我並不擔心。

+0

這個行爲和簡單的'||'有什麼區別嗎?我試圖理解他們爲什麼把它添加到語言中...... – Dave

+0

@Dave:'a || b'評估爲「TRUE」或「FALSE」,而「a?:b」評估爲「a」或「b」。他們做不同的事情。 –

+0

好的,拿到我的JavaScript頭。 – Dave

0
$var = ifNot($foo, 'is empty or false =('); 

相同:

$var = $foo?:'is empty or false =('; 

在正常PHP(> = 5.3版)太。你的ifNot函數是完全多餘的。

+0

[只有自PHP 5.3](http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary )。 –

+2

@LightnessRacesinOrbit Right。但是因爲有一段時間我想用戶至少有5.3(因爲5.2不支持) – bwoebi

+0

@bwoebi如果只有:( – PeeHaa

2

是的,如果你的PHP足夠新(5.3.0或更新)。請參閱PHP documentation on the ternary operator

從PHP 5.3開始,可以省略三元運算符的中間部分。表達式expr1?:如果expr1的計算結果爲TRUE,則expr3返回expr1,否則返回expr3。

所以,當你的代碼上面相當尷尬,有可能是你想要這個三元運算符的功能版本(例如實例,爲callable使用 - 在這種情況下,你可以只用滾封閉:

function($foo, $default) { return $foo ?: $default; }