为变量指定默认值的最佳方法(模拟 Perl ||,||= )

2022-08-30 06:44:25

我喜欢在Perl中做这种事情:分配给if是空的或未定义的。您还具有仅在 未定义或为空时才分配到 的。$foo = $bar || $baz$baz$foo$bar$foo ||= $bletch$bletch$foo$foo

在这种情况下,三元运算符是乏味和令人厌烦的。当然,PHP中有一种简单,优雅的方法吗?

还是唯一的答案是使用 isset() 的自定义函数?


答案 1

PHP 5.3 有一个速记运算符:?:

$foo = $bar ?: $baz;

如果它不是空值(我不知道这在PHP中与Perl有什么不同),那么它分配,并且与Perl和旧版本的PHP中的相同:$bar$baz

$foo = $bar ? $bar : $baz;

但是PHP没有复合赋值运算符(也就是说,没有与Perl的等价物)。||=

此外,如果不设置,PHP会发出噪音,除非你关闭通知。和 之间也存在语义差异。如果变量不存在,则前者返回 false,或者设置为 。如果后者不存在,则返回 true,或者设置为 、 或 。$barisset()empty()NULL0''falseNULL


答案 2

在 PHP 7 中,我们终于有了一种方法来优雅地做到这一点。它称为空合并运算符。你可以这样使用它:

$name = $_GET['name'] ?? 'john doe';

这等效于

$name = isset($_GET['name']) ? $_GET['name']:'john doe';

推荐