我有一个功能,它的工作原理。请查看以下内容:
public static function checkAccessLevel($user, $level) {
public static function checkLevel($user, $level) {
if ($level == "1") {
if (!$user->usertype == 1) {
return array(
'error' => 'Please login before', 'errortype' => 0
);
}
} else if ($level == "2") {
if (!$user->usertype == 2) {
return array(
'error' => 'Please login before', 'errortype' => 0
);
}
} else if ($level == "1,2") {
if (!$user->usertype == 1 || !$user->usertype == 2) {
return array(
'error' => 'Please login before', 'errortype' => 0
);
}
} else {
return array(
'error' => 'Please login before', 'errortype' => 0
);
}
}
我正在寻找代码优化的方法。是否可以重写此功能?
答案 0 :(得分:1)
首先考虑使用switch,它应该更具可读性。
然后你可以将你的条件分组,而不是:
} else if ($level == "1,2") {
if (!$user->usertype == 1 || !$user->usertype == 2) {
将他们分组:
(($level == "1,2") && (!$user->usertype == 1 || !$user->usertype == 2))
然后你可以使用临时变量$ result:
$result = array('Please login...
并在结尾处返回,而不是在每个步骤中使用return关键字,它应该可以帮助您进行调试。
另外我建议阅读Martin Fowlers book about refactoring,这会给你很多好建议。
答案 1 :(得分:1)
public static function checkLevel($user, $level)
{
if (($level == "1" && ! $user->usertype == 1) ||
($level == "2" && ! $user->usertype == 2) ||
($level == "1,2" && ! in_array($user->usertype, array(1, 2))) ||
! in_array($level, array("1", "2", "1,2"))) {
return array(
'error' => 'Please login before', 'errortype' => 0
);
}
}
答案 2 :(得分:1)
$level
始终以逗号分隔,只需将其分解并检查:
public static function checkLevel($user, $level)
{
$level = explode(',', $level);
if(!in_array($user->usertype, $level))
return array(
'error' => 'Please login before',
'errortype' => 0
);
}
更好的是,抛出一个Exception
或返回一个布尔值。
答案 3 :(得分:0)
您可以使用switch语句而不是if语句,如下所示:
public static function checkLevel($user, $level) {
$result = array();
switch($level) {
case '1':
if( $user->usertype == 1) {
$result = array(
'error' => 'Please login before', 'errortype' => 0
);
}
break;
// More cases for each level.
default:
$result = array(
'error' => 'Please login before', 'errortype' => 0
);
}
return $result;
}