gpt4 book ai didi

php - 如何将 PHP 条件语句存储在数据库中供以后使用?

转载 作者:可可西里 更新时间:2023-11-01 12:56:02 26 4
gpt4 key购买 nike

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

if($foo == 3 || $bar > 3) {
$e = someFunction();
};

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

if($foo == 3 || $bar == 5 && $foobar != 9) {
$e = someFunction();
};

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

$foo == 3 || $bar > 3 OR $foo == 3 || $bar == 5

数据库 (MySQL) 中的位,因此我不必通过客户端对所有这些规则进行硬编码或维护同一报告的客户端版本。我想弄清楚我是否可以设置一个变量来替换条件。像这样的东西:

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

可能有 > 100 个不同的客户端,每个客户端可能/将有一组不同的表达式。我只是不确定执行此操作的正确/最佳方法。

更新:

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

如果没有写入条件字段/表的面向用户的界面,它会有什么不同(更安全)吗?这可能是我们自己管理的事情。

最佳答案

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

  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
}

关于php - 如何将 PHP 条件语句存储在数据库中供以后使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7229745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com