isset($a) 的捷径? $a : '其他'; [复制]
Posted
技术标签:
【中文标题】isset($a) 的捷径? $a : \'其他\'; [复制]【英文标题】: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 不仅如此,使用错误抑制器也是一种糟糕的编码习惯。
为什么这个问题看起来很像***.com/q/26477475 你是不是也厌倦了这样做,还是你是同一个人?啊,你觉得它“烦人”,所以我会说你是一样的。
【参考方案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)
(布尔值)。以上是关于isset($a) 的捷径? $a : '其他'; [复制]的主要内容,如果未能解决你的问题,请参考以下文章
G. isset($a),unset($a),empty($a)的区别