【问题标题】:Short way for isset($a) ? $a : 'other'; [duplicate]isset($a) 的捷径? $a : '其他'; [复制]
【发布时间】:2014-10-21 14:23:42
【问题描述】:

在 PHP 中有没有更短的方法?

$b = isset($a) ? $a : 'other';

像在 JS 中一样

$b = $a || 'other';

这看起来并不是一件大事,但是当您要检查大量属性/键时,这会变得很烦人。

提前致谢:)

【问题讨论】:

  • $b = @$a ?: 'other';
  • 这样做确实会破坏代码的所有可读性:(
  • 我通常会有一个数组,我将它与一个具有默认值的数组合并,它 (1) 的优点是只有 1 个点定义了默认值,并且 (2) 只有 1 个语句合并。 (类似于$defaults = array("a"=> "123","b" => 456); $input = array("b"=>"custom"); var_dump(array_merge($defaults,$input));
  • @Dave 不仅如此,使用错误抑制器也是一种糟糕的编码习惯。
  • 为什么这个问题看起来很像stackoverflow.com/q/26477475 你是不是也厌倦了这样做,还是你是同一个人?啊,你觉得它“烦人”,所以我会说你是一样的。

标签: php short


【解决方案1】:

只有当 $a 保证存在时才有可能。所以在你的情况下这是不可能的,因为你似乎不知道是否设置了 $a。

$b = isset($a) ? $a : 'other';

但在这种情况下:

public function foo($var)
{
    $var = $var ?: self::DEFAULT;
}

【讨论】:

    【解决方案2】:

    在 PHP 5.3 中引入了更短的三元语法。来自the documentation

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

    但是,使用这种较短的语法仍然无法(正确地)实现您想要的,但需要在 PHP 7 中引入 coalesce operator

    【讨论】:

    • 除了他想将$a 转换成$b,而不是isset($a)(布尔值)。
    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2013-11-19
    • 2016-12-14
    • 1970-01-01
    • 2019-05-04
    • 2017-12-24
    • 2021-09-18
    相关资源
    最近更新 更多