PSR-2 标准,适用于长 if 条件

2022-08-30 09:17:37

我没有找到这种情况的任何标准:

if ($a == $b && $b == $c && $c == $d && $g == $d) {

}

if (($a == $b && $b == $c) && ($c == $d && $g == $d)) {

}

想象一下,var 名称更长,超过了 80 个字母。我应该如何处理这个问题?它可能看起来像这样:

if (
       $a == $b
    && $b == $c
    && $c == $d
    && $g == $d
) {

    }

答案 1

对于这种情况没有建议/惯例,正如Halcyon已经提到的那样,这是一个非常例外的情况。

但是,对于具有一长串参数的函数调用,有一个建议:

参数列表可以拆分为多行,其中每个后续行缩进一次。执行此操作时,列表中的第一项必须位于下一行,并且每行只能有一个参数。

<?php
$foo->bar(
    $longArgument,
    $longerArgument,
    $muchLongerArgument
);

因此,如果我必须创建一个类似于您的if语句,我会这样做:

if (
    $a == $b &&
    $b == $c &&
    $c == $d &&
    $g == $d
) {
    // do something
}

如您所见,这几乎与您自己提出的解决方案相同,但我更喜欢在条件之后添加运算符。&&


答案 2

就个人而言,我更喜欢

if ($a == $b
    && $b == $c
    && $c == $d
    && $g == $d
) {
    // code here...
}

对于每一行,您都以双 & 符号开头,指示以下语句与其他语句分开。如果将 & 符号放在行的末尾,则当行的长度变化很大时,它可能会变得不那么明显。

例如;

if ($a == $b && 
    $b == $c && 
    $thisisamuchlongerstatementbecauseofthisvar == $d && 
    $g == $d
) {
    // code here...
}

在这种情况下,您必须进一步扫描代码才能知道每行都由双&符号连接。


推荐