所以我的实际问题是,如果我有多个if-elseif案例寻找1个正确匹配,但所有案例都有很多相同的代码,但有些案例有点不同,哪种方式最有效?
按角色排序并重复代码?
$user_role = 2;
if ($user_role === 1) {
codeMethod1();
codeMethod2();
} elseif ($user_role === 2) {
codeMethod1();
codeMethod2();
codeMethod3();
} elseif ($user_role === 3) {
codeMethod2();
codeMethod3();
}
或者,按代码/流程排序并制作巨大的if语句?
$user_role = 2;
if ($user_role === 1 || 2) {
codeMethod1();
}
codeMethod2();
if ($user_role === 2 || 3) {
codeMethod3();
}
我意识到,对于某些人来说,这是一个愚蠢的问题,因为他们已经弄明白了。我是编程新手,我只是想从一开始就把它弄好。我不想破坏我的程序或毁掉那些可能需要修复我的代码的人。
更新
问题澄清的情景:
当用户进入我的网站时,我将其识别为5个类别中的1个。 一些用户会得到相同的治疗方法,但有些用户会得到非常不同的治疗方法。 大约有20种不同的方法,其中一些用户将全部使用它们而其他用户将使用很少的方法。
因此,列出每个类别所需的方法会更好和/或更有效,即使很多代码看起来都是一样的。
示例:
$user_role = getCurrentUserRole();
switch ($user_role) {
case 1:
(uses method1() to method10())
break;
case 2:
(uses method5() to method15())
break;
case 3:
(uses method10() to method20())
break
case 4:
(uses method1() to method20())
break
case 5:
method1();
method4();
method8();
method15();
method20();
}
或者,是否最好列出每个方法并使用if语句来查看$user_role
是否需要它?
示例:
$user_role = getCurrentUserRole();
switch ($user_role) {
// Check for method1
case (1 || 4) {
method1();
}
// Check for method2
case (1 || 4) {
method2();
}
... skip ...
// Check for method5
case (1 || 2 || 4) {
method5();
}
.. Continue checking role permission for each method ..
}
请忽略我的坏英语,并告诉我如果你没有得到我的问题,请详细说明。
答案 0 :(得分:0)
您的用户角色功能下的组功能,只需为特定用户角色调用这些功能。
$user_role = 2;
switch($user_role){
case 1:
userRole1();
break;
case 2:
userRole2();
break;
case 3:
userRole3();
break;
}
function userRole1(){
codeMethod1();
codeMethod2();
}
function userRole2(){
codeMethod1();
codeMethod2();
codeMethod3();
}
function userRole3(){
codeMethod2();
codeMethod3();
}
答案 1 :(得分:0)
我使用角色→功能关联。
但在您的情况下,使用简单的地图将角色编号与可能的功能相关联可能更合适:
$role_funcs = [
"method1" => [ 1, 2, ],
"method2" => [ 1, 2, 3, 5],
"method3" => [ 3, 5],
"method4" => [ 1, 3, 4, ],
// …
"method9" => [ 2, 3, 5],
];
简要概述了将为哪个用户类运行哪些功能块。利用它是非常微不足道的:
foreach ($role_funcs as $callback=>$for_roles) {
if (in_array($user_role, $for_roles)) {
$callback();
}
}
现在只有当你真正拥有所有功能时才有效。 (否则,您甚至可能希望更高目标,将用户和角色包装到对象中,以隐式使用其中一个调度程序模式。)