if (condition) { /* do something */ }
else { /* do something */ }
if (condition)
/* do something */
else
/* do something */
有人告诉我第一个实例不是个好主意。我不知道这是否真的是这种情况(或者第二个实例也是如此);这难道不能缩短输入的字符数吗?还是因为它只会产生混乱?
if (condition) { /* do something */ }
else { /* do something */ }
if (condition)
/* do something */
else
/* do something */
有人告诉我第一个实例不是个好主意。我不知道这是否真的是这种情况(或者第二个实例也是如此);这难道不能缩短输入的字符数吗?还是因为它只会产生混乱?
最佳实践是编写易于他人阅读和更新的代码。
你的第一个形式存在问题,因为它不遵循大多数PHP开发人员习惯的形式:
if (condition) {
// code
} else {
// code
}
// ... or ...
if (condition)
{
// code
}
else
{
// code
}
// ... or ...
if (condition) { /* short code */ } else { /* short code */ }
// ... or ...
condition ? /* short code */ : /* short code */;
请注意,这完全是关于标准实践的问题,不一定合情合理 - 它只是关于其他开发人员习惯看到的内容。
更重要的是,你的第二种形式并不好,因为它会让另一个程序员犯这个错误变得容易:
if (condition)
// code A
else
// code B
// code C (added by another programmer)
在这个例子中,另一个程序员添加了代码C,但忘记用大括号包装整个else块。这会导致问题。你可以通过简单地用大括号将你的if和else块包装起来来防止这种情况发生。我的偏好是保持一致性...所以:
if(...)
{
statement 1;
statement 2;
}
else
{
statement 1;
statement 2;
}
与之无异:
if(...)
{
statement 1;
}
else
{
statement 1;
}
因此,我总是使用它们,因为它是一致的,并且避免了忘记稍后添加它们所带来的问题。
然而,其他人会看着我的代码,并认为在加入 { 和 } 是愚蠢的。他们有他们的理由,我有我的理由...... 我恰好更喜欢我的理由而不是他们的 :-)
//before
if(something)
statement;
//after
if(something)
statement;
addedstatement;
/* Warning: bogus C code! */
if (some condition)
if (another condition)
do_something(fancy);
else
this_sucks(badluck);
对于除了最短语句之外的所有语句,使用大括号并相应地进行间隔。你要这样做有几个原因:
更难出错。
更容易阅读。
在具有宏扩展功能的语言(例如 C、C++)中,如果未包含大括号,则在未加大括号的 if-else
中展开包含多个语句的宏时会导致混乱的逻辑错误。
这更多是编码风格问题。话虽如此,我的个人观点是你的第二个例子可能会带来潜在的危害。在只有花括号可以创建代码块的语言中,很容易意外地“添加第二行到代码块”。但在 PHP 中,由于存在另一种语法,这种情况更不可能引起必要的警报:
if ($_GET["asdf"]==1):
/* do something */
else:
/* do something */
endif;
这是我记得很久以前在一次就业考试中遇到的问题。代码类似于以下内容:
if (x == 0)
x = 2;
else
print("x is: %d", x); // debugging!
x = 4;
大多数人都能发现错误,但你可以将任何你想要替换的“坏代码”插入其中。更微妙的错误出现在你注释掉了“旧版本”的某些内容,而有人取消了注释,突然第二个语句就在块外面了。
基本上,除非它是一个小型测试应用程序,以快速学习概念为目的,否则我总是加上括号(即使在测试应用程序中,我通常也会加上)。如果我不这样做,即使在5行方法中,以后也不值得头疼。