如何在数据库中存储PHP条件文件以供以后使用?

Jas*_*son 8 php conditional-statements

在我们当前的应用程序中,我有一个包含以下内容的报告:

if($foo == 3 || $bar > 3) {
    $e = someFunction();
};
Run Code Online (Sandbox Code Playgroud)

但对于同一表达式可能是不同的客户端:

if($foo == 3 || $bar == 5 && $foobar != 9) {
    $e = someFunction();
};
Run Code Online (Sandbox Code Playgroud)

有没有一种直接的方式来存储两个不同的表达式,只有

$foo == 3 || $bar > 3 OR $foo == 3 || $bar == 5
Run Code Online (Sandbox Code Playgroud)

数据库中的位(MySQL)所以我不必通过客户端硬编码所有这些规则或维护同一报告的客户端版本.我试图找出是否可以设置变量o替换条件.就像是:

$conditions = $row_rsConditions['condition_row']    //Get $foo == 3 || $bar > 3 from the DB and store it as $conditions
if($conditions) {
    $e = someFunction();
};
Run Code Online (Sandbox Code Playgroud)

可能有> 100个不同的客户端,每个客户端可能/将有一组不同的表达式.我只是不确定这样做的正确/最佳方式.

更新:

我想我使用PHP的eval()函数理解这些问题.但是由于可能的组合数量,我倾向于使用DB来存储条件(不确定是否还在使用eval())

如果没有面向用户的接口写入条件字段/表,是否会产生任何差异(更安全)?这可能是我们单独管理的事情.

bum*_*box 3

我会非常小心地将逻辑存储在数据库中。

  1. 您的代码不再集中在一处。
  2. 数据库中的逻辑不太可能受到源代码控制
  3. 如果您更改代码并破坏了所有特定于客户端的逻辑,则必须返回数据库并为每个客户端进行编辑。
  4. 其他人可以访问数据库并将代码更改为恶意代码。

这可能不是最好的解决方案,但我建议创建一个抽象基类,然后从中继承一个特定于每个客户端的类。

任何自定义的函数都可以作为方法添加到基类中,并针对客户端特定的实现进行重写。

使用 switch 语句根据已存储在数据库中的客户端 ID 或名称(不会更改的内容)实例化该类。

switch ($client_name) {

case "abc ltd":
   $customlogic = new CustomLogicAbc();
   break;

case "zyx ltd":
   $customlogic = new CustomLogicXyz();
   break;

default: 
   $customlogic = new CustomLogicDefault();
   break;

}

if ($customlogic->doSomething($parm1, $parm2)) {
  // custom logic has been applied
}
Run Code Online (Sandbox Code Playgroud)