首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将数组转换为php语句?

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

Stack Overflow用户
提问于 2018-07-27 06:54:41
回答 1查看 68关注 0票数 0

我有一个像这样的数组。

代码语言:javascript
复制
[Summary] => Array
             (
                 [0] => yearManufactured
                 [1] => &&
                 [2] => make
                 [3] => ||
                 [4] => model
             )

如何将此数组转换为函数调用和运算符,然后使用它进行比较,例如,将其转换为...

代码语言:javascript
复制
if( $this->yearManufactured() && $this->make() || $this->model() ) {
     // do something
} else {
     // do something else
}

类中的方法..

代码语言:javascript
复制
public function yearManufactured() {
     return true;
}

public function make() {
     return false;
}

public function model() {
     return true;
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-27 07:47:15

这看起来像是eval的有效用法。您可以验证每个数组项是否为运算符或有效的方法名,并将方法调用的结果转换为布尔字符串。把这些东西放在一起应该会产生一个字符串,你可以安全地计算它,而不用担心它会做一些糟糕的事情,而不是可能导致解析错误,这在PHP7中可能会被捕获。

如果您在数组中发现任何不应该存在的内容,或者表达式不能解析,您可以返回null,或者抛出一个异常,无论您想如何处理它。

代码语言:javascript
复制
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。不要往里面放任何东西,除非你确切地知道它是什么。

Here's an example to mess with.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51548536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档