如何将数组转换为php语句?

如何将数组转换为php语句?,php,methods,comparison,operators,function-call,Php,Methods,Comparison,Operators,Function Call,我有一个这样的数组 [Summary] => Array ( [0] => yearManufactured [1] => && [2] => make [3] => || [4] => model ) 如何将此数组转换为函

我有一个这样的数组

[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;
}

这似乎是
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;
}
不过,在评估时要非常小心。除非你确切知道它是什么,否则不要往里面放任何东西


有趣的是,你是否需要一种方法来确定它是否应该被解释为
(a&&b)| c
而不是
a&&b | c)
?是的,我还没有做到这一点,但我需要修改,我很容易添加“(“and”)”作为另一个单独的数组值。已检查所有方法名是否存在。我的想法是:将数组内爆成一个字符串,胶水是“”,然后用$this->$methodName()替换所有非字母数字单词。我不确定这个字符串一旦创建,是否可以转换和使用。