我正在开发 Expression Builder,用户可以在其中添加许多规则。
我正在尝试将规则转换为一个表达式,但 PHP 始终将其视为字符串并始终返回 true
。
有什么方法可以使该表达式可执行吗?
public function translate($record = null){
$rule = $this->rule;
$conditions = [];
if( count($rule->rules) ){
$last_key = key( array_slice( $rule->rules, -1, 1, TRUE ) );
foreach ($rule->rules as $key => $value) {
$conditions[] = '"'.$record->{$value->field} .'" ' . $this->operator($value->operator) .' "'. $value->value.'"';
}
}
$condition = implode(' '.$rule->condition.' ', $conditions);
return $condition;// result : "Full Packaged Product" == "Full Packaged Product" AND "No" != "Y"
}
// using here
foreach( $records as $ind => $record ){
foreach( $rules as $rule){
// $condition = $rule->translate(collect($record));
$condition = $rule->translate($record);
if($condition){
dump('Pass', $condition);
}else{
dump('Fail', $condition);
}
}
}
我还尝试使用 eval()
PHP 函数,但没有成功!
谢谢, 甘蓝
最佳答案
如果您确定代码是安全的,您可以使用 eval()
。
用法:
eval('$res = "yes" == "no" ;');
var_dump($res); // bool(false)
关于php - 将字符串转换为可执行表达式 PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48557141/