仅当为真时才对 属性 声明使用三元比较

Using ternary comparison for property declaration only when true

我在 class 中编写了一个 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);

它returns:

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

现在我的问题是,这是对三元比较的有效使用吗?或者这只是一个错误?代码现在看起来简单多了,但是我不想使用将来可能会 'fixed' 的东西。

你最好只使用 if 语句,因为你真的不需要 else statement/block.

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

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

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

赋值是一种表达式,因此在 <then-expression> 中是允许的。文字字符串也是一个有效的表达式。

并且任何表达式都可以作为语句,因此您可以使用三元而不将结果赋值给任何东西作为语句。

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

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

而不是

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

如果您不使用该值,则无需避免冗余,因此除了试图显得聪明或节省几行之外,没有理由使用三元。