函数和OR运算符

时间:2013-05-09 14:15:39

标签: php

PHP中是否有简写:

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

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

在javascript中你可以做到:

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

但在PHP中,如果你这样做,$c将是boolean(这是正常的,但我想知道是否存在另一种做我想做的简写)。

更新
谢谢你们所有答案。

最简单的方法似乎是:

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

我个人也喜欢:

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

为了良好的可读性。

7 个答案:

答案 0 :(得分:3)

这可能有效:

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

答案 1 :(得分:2)

不可能像在Javascript中那样做,但你可以使用三元构造的简短版本:

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

另一种方法是使用or的优先级较低。它不是那么漂亮,但实际上它更接近于你如何在Javascript中实现它:

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

表示上述内容的另一种方式是将其包装在括号中,以便更容易理解:

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

赋值运算符=具有比“or”运算符更高的优先级(尽管不要将它与||运算符混淆),这意味着or之后的部分将不会被执行如果第一部分评估为true。它基本上与此相同:

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

这两个表达式都是评估为truefalse的分配。如果第一个表达式为true,则$c将为a()。否则,将尝试第二个表达式,因为它是最后一个表达式,并且因为之后没有任何操作,$c将等于b()

无论如何,这不是一个真正重要的问题。如果你花时间担心变量赋值的美学,那么你就不必担心正确的事情了。

答案 2 :(得分:1)

我喜欢这种方式,但这是一个偏好问题

if( !$c=a() ){
    $c=b();
}

,如

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

答案 3 :(得分:1)

有可能像这样使用黑魔法。我更喜欢用更长的形式写它。

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

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

echo $c;

答案 4 :(得分:1)

你可以这样做:

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

答案 5 :(得分:1)

您可以使用赋值运算符来获益。

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

以下是演示:http://codepad.org/kqnKv2y4

答案 6 :(得分:-1)

我假设你在寻找这个。

http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

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

我不确定你的目的是什么。