在PHP中创建堆栈条件的巧妙方法

时间:2015-12-09 13:14:45

标签: php mysql logic structure

开发票务网站(PHP + MySql),其中提供了许多用户类型,例如usermanagerceo等...此处我有关于逻辑问题

当某些用户在故障单表单下查看故障单时,显示的按钮数量可能会根据不同的条件而有所不同,例如:用户类型,故障单状态或经理等批准的故障单等。

所以我的问题是我如何在php中创建一些逻辑结构,可以处理多个条件并在将来轻松修改它们(添加新条件,删除旧条件)

我的目标是不是像if(A=B && C=D ...){ /*show confirm button*/ }

那样强硬的PHP

我当前的 idia 来创建名为user_actions.phpmanager_actions.php的php文件,...根据其角色类型在这多个ifs条件中写入并包含它在故障单include $user['type']_actions.php下,但这只会将不同文件中的许多愚蠢ifs分开

所以,请问,任何人都可以建议更好的方法来为此创建更聪明的逻辑吗?用简单的描述用几句话就不需要带大代码片段的例子

PS:我知道这不是 stackoverflow 的问题类型,但无论如何它是逻辑问题,我正在寻找聪明的解决方案

3 个答案:

答案 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语句