在 PHP 中创建条件堆栈的巧妙方法
Clever way to create stack of conditions in PHP
我正在开发 票务网站 (PHP+MySql),其中存在许多用户类型,例如 user
、manager
、 ceo
等等...这里我遇到了逻辑问题
当某些用户在工单表单下查看工单时,显示的按钮数量可能会根据不同的条件而有所不同,例如:用户类型、工单状态或工单是否由经理批准等..
所以我的问题是我如何在php中创建一些逻辑结构来处理多个条件并在将来轻松修改它们(添加新条件,删除旧)
我的目标 是不硬核 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:我知道这不是 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 语句
我正在开发 票务网站 (PHP+MySql),其中存在许多用户类型,例如 user
、manager
、 ceo
等等...这里我遇到了逻辑问题
当某些用户在工单表单下查看工单时,显示的按钮数量可能会根据不同的条件而有所不同,例如:用户类型、工单状态或工单是否由经理批准等..
所以我的问题是我如何在php中创建一些逻辑结构来处理多个条件并在将来轻松修改它们(添加新条件,删除旧)
我的目标 是不硬核 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:我知道这不是 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 语句