0

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();

为了良好的可读性。

4

7 回答 7

3

这可能有效:

$c = ($c) ? : b();
于 2013-05-09T14:17:16.377 回答
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
}

两个表达式都是赋值为trueor的赋值false。如果第一个表达式是,true那么$c将是a()。否则将尝试第二个表达式,并且因为它是最后一个表达式,并且因为在那之后没有做任何事情,所以$c将等于b()

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

于 2013-05-09T14:27:08.100 回答
1

您可以使用赋值运算符对您有利。

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

这是一个演示:http ://codepad.org/kqnKv2y4

于 2013-05-09T14:26:09.417 回答
1

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

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

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

echo $c;
于 2013-05-09T14:23:17.723 回答
1

你可以这样做:

$c = a() OR $c = b();
于 2013-05-09T14:23:18.303 回答
1

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

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

如在

if(!$User=$db->getUserFromID($user_id)){
    $User=$db->getUserFromUsername($username);
}
于 2013-05-09T14:20:34.217 回答
-1

我假设你正在寻找这个。

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

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

我不确定你要做什么。

于 2013-05-09T14:21:42.407 回答