作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我们当前的应用程序中,我有一个包含类似内容的报告:
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())
如果没有写入条件字段/表的面向用户的界面,它会有什么不同(更安全)吗?这可能是我们自己管理的事情。
最佳答案
我会非常小心地将逻辑存储在数据库中。
这可能不是最好的解决方案但我建议创建一个抽象基类,然后从中继承一个特定于每个客户端的类。
任何自定义的函数都可以作为方法添加到基类中,并针对特定于客户端的实现进行覆盖。
使用 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/
命令 svn status 返回如下内容: ? SomeClient\BUTCHERED.docx M SomeClient\Development notes.txt ?
我是一名优秀的程序员,十分优秀!