2013-05-09 68 views
0

是否有一個簡寫:功能和PHP中的OR操作

function a() {...} 
function b() {...} 

$c = a(); 
$c = ($c) ? $c : b(); 

在javascript中,你可以簡單地做:

$c = a() || b(); 

但在PHP中,如果你這樣做,$c將是一個boolean(這是正常的,但我想知道是否存在另一個我想要的速記)。

UPDATE
謝謝你們所有的答案。

做的最簡單的辦法似乎是:

$c = a() ?: b(); 

我個人也很喜歡:

$c = a() or $c = b(); 

了良好的可讀性。

+1

'$ c = a()?:b();' – 2013-05-09 14:19:17

+0

@Jack:它似乎有效:http://phpassist.com/6fcca#2 – 2013-05-09 14:22:50

回答

2

這是不可能做到像在Javascript,但你可以使用三元結構的短版:

$c = a() ?: b(); 

另一種方法是使用or的優先級較低。這是不漂亮,但它實際上更接近你如何能做到這在Javascript:

$c = a() or $c = b(); 

代表上面,這樣就比較容易理解的另一種方法,是把它包起來括號:

($c = a()) or ($c = b()); 

賦值操作符,=,具有更大的優先級比「或」運算(不與||操作者混淆,雖然),這意味着or之後的部分將不會被執行,如果第一部分求值到true。它本質上是一樣的:

if ($c = a()) { 
    // Do nothing 
} elseif ($c = b()) { 
    // Do nothing 
} 

兩個表達式是求值truefalse分配。如果第一個表達式是true那麼$c將是a()。否則,第二個表達式將被嘗試,並且因爲它是最後一個表達式,並且因爲之後沒有做任何事情,所以$c將等於b()

無論如何,這不是一個真正重要的問題。如果你用時間去擔心變量賦值的美學問題,那麼你並不擔心正確的事情。

+0

是的,這不是一個非常重要的問題。不過,我喜歡學習新東西並提高自己的技能。謝謝您的回答。 – 2013-05-09 14:30:32

3

這可能工作:

$c = ($c) ? : b(); 
+1

這是爲> PHP 5.3? – 2013-05-09 14:18:03

+0

@TamasPap - yes;它是5.3和以上。 (請告訴我你沒有使用比這更舊的版本) – Spudley 2013-05-09 14:18:59

+0

@TamasPap我想是的。 – vikingmaster 2013-05-09 14:19:06

1

我喜歡這種方式,但其在

if(!$User=$db->getUserFromID($user_id)){ 
    $User=$db->getUserFromUsername($username); 
} 
1

有可能使用這樣的黑魔法。我寧願以更長的形式編寫它。

function a() { 
    return false; 
} 
function b() { 
    return true; 
} 

($c = a()) || ($c = b()); 

echo $c; 
1

你可以這樣做:

$c = a() OR $c = b();