【问题标题】:Any more concise way to set default values?还有更简洁的方法来设置默认值吗?
【发布时间】:2012-11-10 13:28:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: php variables variable-assignment default-value


    【解决方案1】:

    下面是一个较短的语法:

    isset($v) || $v="default value";
    

    【讨论】:

      【解决方案2】:

      刚问过this 并被指到这里。因此,如果您使用 keyarray,这可能是一种改进

      function isset_get($array, $key, $default = null) {
          return isset($array[$key]) ? $array[$key] : $default;
      }
      

      【讨论】:

        【解决方案3】:

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

        您想要的是缩短的三元表达式执行隐式isset()。这已在mailing list 上进行了讨论,并创建了一个涵盖该概念的ifsetor RFC

        由于在上述讨论时已经存在缩短的三元运算符,因此像 proposed 使用不存在的运算符 ??

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

        如果 $v 未定义,则分配 'default value'

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

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

        // DO NOT USE
        $v = @$v ?: 'default value';
        

        【讨论】:

        • 如果$v 已经设置并且它是''0nullfalse 怎么办?
        • @jackflash 因此我提到了“可怕的构造”
        • 这不是一个好习惯。所以我们可以这样做——error_reporting(E_ALL & ~ E_NOTICE); echo $v = $v ?: '默认值';这与上面的输出相同。
        • @SoumyaBiswas 我无法选择更糟的。
        • @SoumyaBiswas 是的,没错; @ 的作用大致相同,所以答案确实是(实际上)不可能使 OP 代码更短:)
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-10-28
            • 1970-01-01
            相关资源
            最近更新 更多