当使用开括号和近括号时,何时不使用

时间:2015-03-05 20:41:18

标签: php if-statement

我在if / else语句之前看到了这段不使用括号或:的代码。我认为每个陈述都应该以 {开头 他们不在这里使用它的原因是什么?

if (!$this->Article)
        throw NotFoundException('Article');

    // Set required permission.
    $UserModel = new UserModel();
    if ($this->Article->Status != ArticleModel::STATUS_PUBLISHED)
        if (($this->Article->AttributionUserID == Gdn::Session()->UserID)
            && !$UserModel->CheckPermission($this->Article->AttributionUserID, 'Articles.Articles.Edit')
        )
            $this->Permission('Articles.Articles.View');
        else
            $this->Permission('Articles.Articles.Edit');
    else
        $this->Permission('Articles.Articles.View');

6 个答案:

答案 0 :(得分:3)

请不要忘记使用phpunit计算代码覆盖率的边缘情况:

<?php
// Because it is "line based" and not statement base coverage
// one line will always have one coverage status
if (false) this_function_call_shows_up_as_covered();

// Due to how code coverage works internally these two lines are special.
// This line will show up as non executable
if (false)
    // This line will show up as covered because it is actually the 
    // coverage of the if statement in the line above that gets shown here!
    will_also_show_up_as_coveraged();

// To avoid this it is necessary that braces are used
if (false) {
    this_call_will_never_show_up_as_covered();
}
?>

有关详细信息,请参阅https://phpunit.de/manual/current/en/code-coverage-analysis.html#code-coverage-analysis.edge-cases

Imo这就是为什么最好使用always括号的一个原因,另一个原因是,调试你给出的代码这样的代码非常烦人。

答案 1 :(得分:1)

使用括号向解释器指示if语句的开始和停止位置。但是,当if语句只包含一行时,括号可以省略,解释器有条件地执行(或不执行)下一行。

这是否是一个好的做法是值得商榷的。

答案 2 :(得分:0)

如果if语句中有2个或更多运算符,请始终使用括号。如果是一个操作员,您可以跳过它们。

但我建议总是使用括号。

答案 3 :(得分:0)

如果在if语句返回true的情况下必须运行的代码只有一行,则不需要括号。 if语句中的括号只是在其中包含多行代码的情况下才需要。

答案 4 :(得分:0)

如果“if”语句之间的代码由一行组成,则可以删除括号“{”但如果“if”语句的代码由多行组成,则必须使用它

答案 5 :(得分:0)

当只有一个句子要执行时,你可以避免括号,或者在这段代码中只有一个控制语句......

if (!$this->Article)
    throw NotFoundException('Article'); //Only one sentence


// Set required permission.
$UserModel = new UserModel();
if ($this->Article->Status != ArticleModel::STATUS_PUBLISHED)
    //Insde there is only one if/else
    if (($this->Article->AttributionUserID == Gdn::Session()->UserID)
        && !$UserModel->CheckPermission($this->Article->AttributionUserID, 'Articles.Articles.Edit')
    )
        //Inside there is only one sentence
        $this->Permission('Articles.Articles.View');
    else
        //Else statement contains only one sentence
        $this->Permission('Articles.Articles.Edit');
else
    //Else statement contains only one sentence
    $this->Permission('Articles.Articles.View');

在第一个例子中,如果你想执行2个句子,它必须用括号括起来:

if (!$this->Article)
{
    $foo = true;
    throw NotFoundException('Article'); 
}

此致