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

Clever way to create stack of conditions in PHP

我正在开发 票务网站 (PHP+MySql),其中存在许多用户类型,例如 usermanagerceo 等等...这里我遇到了逻辑问题

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

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

我的目标 是不硬核 php 很多如果 if(A=B && C=D ...){ /*show confirm button*/ }

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

所以,请问有人可以建议更好的方法来为此创建更聪明的逻辑吗?只需几句话的简单描述,无需带大代码片段示例

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

我建议你看看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
}

在某些时候,您必须写下所有这些条件。我会创建一个中央用户 class 并将所有这些条件放入其中。

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 :-(";
}

当然,用户的属性 class 必须根据您的需要进行调整。

尝试以下原则:

创建具有用户级别(用户、管理员等)的数据库table user_level

创建有条件的数据库tableconditions。每个条件都链接到 user_level table。这使您可以轻松地 add/edit/remove 条件。

在代码中,您可以创建查询来获取特定用户级别的条件。然后循环遍历所有的结果,检查是否满足条件。这样你的代码是灵活的,而不是硬编码充满 IF 语句