我有一个像这样的数组。
[Summary] => Array
(
[0] => yearManufactured
[1] => &&
[2] => make
[3] => ||
[4] => model
)
如何将此数组转换为函数调用和运算符,然后使用它进行比较,例如,将其转换为...
if( $this->yearManufactured() && $this->make() || $this->model() ) {
// do something
} else {
// do something else
}
类中的方法..
public function yearManufactured() {
return true;
}
public function make() {
return false;
}
public function model() {
return true;
}
发布于 2018-07-27 07:47:15
这看起来像是eval
的有效用法。您可以验证每个数组项是否为运算符或有效的方法名,并将方法调用的结果转换为布尔字符串。把这些东西放在一起应该会产生一个字符串,你可以安全地计算它,而不用担心它会做一些糟糕的事情,而不是可能导致解析错误,这在PHP7中可能会被捕获。
如果您在数组中发现任何不应该存在的内容,或者表达式不能解析,您可以返回null,或者抛出一个异常,无论您想如何处理它。
public function evaluateExpressionArray(array $expression) {
// build the expression
$expr = '$result =';
foreach ($expression as $part) {
if ($part == '||' || $part == '&&') {
$expr .= " $part ";
} elseif (method_exists($this, $part)) {
$expr .= $this->$part() ? 'true' : 'false';
} else {
return null;
}
}
// try to evaluate it
try {
eval("$expr;");
} catch (ParseError $e) {
return null;
}
return $result;
}
不过,要非常小心地使用eval
。不要往里面放任何东西,除非你确切地知道它是什么。
https://stackoverflow.com/questions/51548536
复制相似问题