4

我真的很喜欢||JavaScript 中的运算符,我们可以在其中进行内联条件赋值。

var a = 0;
var b = 42;
var test = a || b || 'default value';
console.log(test); // 42

这很容易阅读,并且不要占用太多行。


在 PHP 中,这个逻辑运算符返回布尔值:

$a = 0;
$b = 42;
$test = $a || $b || 'default value';
print_r($test); // bool(true)

当然,我们可以使用ternaries进行内联赋值:

$test = $a ? $a : $b ? $b : 'default';
print_r($test); // int(42)

但这会使代码模棱两可,这不是那么容易阅读。


所以我的问题来了:

你知道一个很好的 PHP hack 来做内联条件赋值吗?

4

2 回答 2

3

在 PHP 5.3+ 中,您可以这样做

$test = $a ?: ($b ?: 'default value');
于 2013-05-12T08:10:53.293 回答
1

只要您不需要短路副作用,这将起作用:

function either_or() {
    $nargs = func_num_args();
    if ($nargs == 0) {
        return false;
    }
    $args = func_get_args();
    for ($i = 0; $i < $nargs-1; $i++) {
        if ($args[$i]) {
            return $args[$i];
        }
    }
    return $args[$nargs-1];
}

$test = either_or($a, $b, "Default value");
于 2013-05-12T08:16:56.670 回答