我在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');
答案 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');
}
此致