开发票务网站(PHP + MySql),其中提供了许多用户类型,例如user
,manager
,ceo
等...此处我有关于逻辑问题
当某些用户在故障单表单下查看故障单时,显示的按钮数量可能会根据不同的条件而有所不同,例如:用户类型,故障单状态或经理等批准的故障单等。
所以我的问题是我如何在php中创建一些逻辑结构,可以处理多个条件并在将来轻松修改它们(添加新条件,删除旧条件)
我的目标是不是像if(A=B && C=D ...){ /*show confirm button*/ }
我当前的 idia 来创建名为user_actions.php
,manager_actions.php
的php文件,...根据其角色类型在这多个ifs
条件中写入并包含它在故障单include $user['type']_actions.php
下,但这只会将不同文件中的许多愚蠢ifs分开
所以,请问,任何人都可以建议更好的方法来为此创建更聪明的逻辑吗?用简单的描述用几句话就不需要带大代码片段的例子
PS:我知道这不是 stackoverflow 的问题类型,但无论如何它是逻辑问题,我正在寻找聪明的解决方案
答案 0 :(得分:1)
我建议您查看switch blocks。
switch($user_type){
case('ceo'):
// do stuff for CEO
break;
case('manager'):
// do stuff for manager
break;
case('user'):
// do stuff for users
break;
default:
// do stuff fo everyone else
}
答案 1 :(得分:1)
在某些时候,你必须记下所有这些条件。我会创建一个中央用户类,并将所有这些条件直接放入其中。
class User {
public function __construct($wearsTie, $looksAngry, $alktsAlot) {
$this->wearsTie = $waersTie;
$this->looksAngry = $looksAngry;
$this->talksAlot = $talksAlot;
}
public function isManager() {
return ($this->wearsTie && $this->looksAngry)
}
public function isCEO() {
return ($this->wearsTie && $this->talksAlot);
}
}
在您看来,您可以简单地使用
$user = new User(true,true,false);
if($user->isCEO) {
echo "I'm CEO!";
} else {
echo "I whish I was CEO :-(";
}
对于corse,用户类的属性必须根据您的需要进行调整。
答案 2 :(得分:1)
尝试以下原则:
使用用户级别(用户,经理等)创建数据库表user_level
。
创建具有条件的数据库表conditions
。每个条件都链接到user_level
表。这使您可以轻松添加/编辑/删除条件。
在代码中,您可以创建查询以获取特定用户级别的条件。然后遍历所有结果并检查是否满足条件。这样,您的代码就是灵活的,而不是硬编码的IF语句