5

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

有没有比以下代码设置变量的默认值更好或更简洁的方法?

$v = isset($v) ? $v : "default value";
4

5 回答 5

6

TL;DR - 不,这个表达式不能再短了。

您想要的是缩短的三元表达式执行隐式isset(). 这已在邮件列表中进行了讨论,并且已经创建了涵盖该概念的ifsetorRFC 。

由于在上述讨论时已经存在缩短的三元运算符,因此使用不存在的运算符提出了类似这样的建议??

// PROPOSAL ONLY, DOES NOT WORK
$v = $v ?? 'default value';

'default value'如果$v未定义,则赋值。

然而,迄今为止,在主要语言中还没有实现类似的功能。在那之前,你写的东西不能再短了。

这个可怕的结构更短,但请注意,它不一样,因为如果变量存在,它会分配默认值,但计算结果为false

// DO NOT USE
$v = @$v ?: 'default value';
于 2012-11-22T07:43:29.613 回答
2

刚问这个,就被指到了这里。因此,如果您使用 a keyof an array,这可能是一种改进

function isset_get($array, $key, $default = null) {
    return isset($array[$key]) ? $array[$key] : $default;
}
于 2012-12-29T23:57:46.360 回答
2

这是一个较短的语法:

isset($v) || $v="default value";
于 2014-01-24T21:24:01.003 回答
0

没有。如果您真的不知道是否$v设置,这是正确的方法。

于 2012-11-22T07:41:40.090 回答
0

没办法。如果你使用三元运算符。

于 2012-11-22T07:43:22.637 回答