设置默认值(条件赋值)

35
在 Ruby 中,您可以轻松地为变量设置默认值。
x ||= "default"

如果 x 为 nil 或 false,上述语句将把 x 的值设为"default"

在 PHP 中是否有类似的快捷方式,还是我必须使用较长的形式:

$x = (isset($x))? $x : "default";

有没有更简单的方法在PHP中处理这个问题?

6个回答

47

从PHP 5.3版本开始,您可以在省略中间参数的情况下使用三元运算符:

$x = $x ?: 'default';

1
这样做的问题是,PHP 可能会抛出有关未定义变量的通知,如果您经常这样做,它将根据您设置的报告级别使输出/日志混乱不堪。 - jerseyboy

12

从PHP 7.0开始,您还可以使用null合并运算符

// PHP version < 7.0, using a standard ternary
$x = (isset($_GET['y'])) ? $_GET['y'] : 'not set';
// PHP version >= 7.0
$x = $_GET['y'] ?? 'not set';

1
“语法糖”确实很甜 :) 文档说明该运算符可以链接使用:$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody'; - OXiGEN

7
isset($x) or $x = 'default';

4
只要我们不将$x$的假值视为“已设置”,那么这个方法就可行。 - Adam Bellaire
$x === false 和 $x = 'default'; isset($x) 或 $x = 'default'; - Michał Niedźwiedzki
1
@Adam - 这是真的,但对于 Ruby 的 "||=" 符号表示法也可以这样说:x = false; x ||= true; x #=> true - rampion

3

从PHP 7.4开始,您可以编写以下代码:

$x ??= "default";

只要 $xnull,这段代码就可以工作。其他“falsy”(假值)的数值不被视为“未设置”。

2

我将其封装在一个函数中:

function default($value, $default) {
    return $value ? $value : $default;
}
// then use it like:
$x=default($x, 'default');

有些人可能不喜欢它,但如果你正在进行疯狂的函数调用,使用它可以使你的代码更加清晰。


1
将其包装在函数调用中的“问题”是所有参数都会被评估。在 a = b || c 中,只有在 b 为 falsey 时才会评估 c。这可能是您想要的,也可能不是。 - KaptajnKold
希望你不会在赋值中调用具有副作用的方法。 - Kris Nuttycombe
@KaptajnKold 你可以通过引用传递,这样参数就不会被评估 ;) - NikiC

0

我认为你的长格式已经是php的快捷方式了...而且我不会使用它,因为它不易读

一些注意事项: 在Symfony框架中,大多数“get”方法都有第二个参数来定义默认值...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接