2013-05-09 38 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();