如果你想 shortcut something ,并且你看到我们的例子有包含有else觉得有点失望。我们有一个bonus tip 你可能会感兴趣的。我们并不确定它可以被认为是a shortcut,但是我们希望它仍然是有帮助的。
考虑一下一个用于检测一个用户是否被授权查看一个特定页面的函数:
<?php
function authorized($username, $page) {
if (!isBlacklisted($username)) {
if (isAdmin($username)) {
return TRUE;
} elseif (isAllowed($username, $page)) {
return TRUE;
} else {
return FALSE;
}
} else {
return FALSE;
}
}
?>
这个例子是相当的简单,因为只有三条规则需要考虑:
administrators 总是被允许访问的,
处于黑名单的永远是禁止访问的,
isAllowed()决定其它人是否有权访问。
(还有一个特例是:当一个administrator 处于黑名单中,但这似乎是不太可能的事,所以我们这里直接忽视这种情况)。
我们使用函数来做这个判断以保持代码的简洁然后集中注意力到业务逻辑上去。
如:
<?php
function authorized($username, $page) {
if (!isBlacklisted($username)) {
if (isAdmin($username) || isAllowed($username, $page)) {
return TRUE;
} else {
return FALSE;
}
} else {
return FALSE;
}
}
?>
事实上,你可以精减整个函数到一个复合条件:
<?php
function authorized($username, $page) {
if (!isBlacklisted($username) && (isAdmin($username) || isAllowed($username, $page)) {
return TRUE;
} else {
return FALSE;
}
}
?>
最后,这个可以被减少到只有一个return:
<?php
function authorized($username, $page) {
return (!isBlacklisted($username) && (isAdmin($username) || isAllowed($username, $page));
}
?>
如果你的目标是誊清代码的行数,那么这样你做到的。但是,你要注意到,我们在用isBlacklisted(), isAdmin() 和 isAllowed() ,这取决于参与这些判断的东西,减少代码到只剩下一个复合条件可能不吸引人。
这下说到我们的小技巧上了,一个“立即返回”函数,所以,如果你尽快返回,你可以很简单地表达这些规则:
<?php
function authorized($username, $page) {
if (isBlacklisted($username)) {
return FALSE;
}
if (isAdmin($username)) {
return TRUE;
}
return isAllowed($username, $page);
}
?>
这个例子使用了更多行数的代码,但是它是非常简单和不惹人注意的。更重要的是,这个方法减少了你必需考虑的上下文的数量。例如,一旦你决定了用户是否处于黑名单里面,你就可以安全地忘掉这件事了。特别是你的逻辑很复杂的时候,这是相当的有帮助的。
4. 总是使用大括号
PS:原谅是“扔掉那些方括号 Drop Those Brackets”







