仅在属性声明时使用三元比较

时间:2016-12-15 02:05:43

标签: php ternary-operator

我在一个类中编写了一个foreach循环,检查每个项目是否符合某个条件,然后再将其作为属性进行分配,但是我考虑过使用三元比较。

原来以下代码运行正常:

$res = [];
$config = [
    'red' => 'RED', 
    'magenta' => 'MAGENTA', 
    'blue' => 'BLUE',
    'lilac' => 'LILAC'
];
$allowed = ['red', 'green', 'blue'];

foreach($config as $name => $value) {
    in_array($name, $allowed) ? $res[$name] = $value:'';
}

print_r($res);

它返回:

Array
(
    [red] => RED
    [blue] => BLUE
)

现在我的问题是,这是三元比较的有效用途吗?或者这只是一个错误?代码现在看起来更简单,但是我不想使用将来可能会“固定”的东西。

2 个答案:

答案 0 :(得分:0)

你最好只使用if语句,因为你真的不需要else语句/块。

但是,如果您正在编写生产代码并且一切正常,并且它通过了代码审查(如果您有那些)并且您提供了适当的单元测试,那么将来可能永远不会被其他人修复

答案 1 :(得分:0)

这是有效的代码。三元的语法是:

<condition> ? <then-expression> : <else-expression>

作业是一种表达方式,因此<then-expression>允许使用。文字字符串也是一个有效的表达式。

并且允许任何表达式作为语句,因此您可以使用三元组而不将结果作为语句分配给任何内容。

但我认为大多数程序员都会考虑这种糟糕的风格。三元组的目的是提供一种简洁的方法来使用需要值的条件表达式,以避免重复周围的代码,例如。

$var = isset($var1) ? $var1 : '';

而不是

if (isset($var1)) {
    $var = $var1;
} else {
    $var = '';
}

如果您没有使用该值,则无法避免冗余,除了尝试显示聪明或保存几行之外,没有理由使用三元组。