动态数量为 arguments/parameters 的匿名函数

Anonymous function with dynamic number of arguments/parameters

所以,前段时间我为 jQuery Query Builder 插件构建了一个解析器,它将公式解析为 PHP 代码,returns 根据添加的参数进行一些计算,它可以范围从 return $a + $b;

if($a == 'some_value' || $c == 'other_value') {
    return $something;
} else if($b == 'something' && $d == 'anything') {
    return $something_else;
} else {
    return $anything;
}

它可能会更复杂。问题是它将 this 创建为一个字符串,然后我将其传递给另一个函数,该函数 returns 是使用 create_function 创建的动态函数,但是 PHP 中的构造函数从版本 7.2 开始已弃用.0。

我现在的问题是我需要能够创建具有动态参数数量的匿名函数,并且这些参数需要具有动态变量名。这是我之前的代码

protected function createFunction($formula, &$data)
{
    $args = '';

    foreach($data as $key => $value) {
        $args .= '$' . $key . ', ';
    }

    return create_function(substr($args, 0, strlen($args) - 2), $formula);
}

如您所见,$formula 是我上面写的动态 PHP 代码,$data 是一个关联数组(通常是数据库中的一行)。有什么想法吗?

编辑: 忘了说了,公式本身不是问题,因为我可以只使用 eval() 函数(我不关心安全性这里没关系),只是我不确定如何使用动态变量名称添加动态数量的参数。

你可以选择 Anonymous functions 这个。

由于您的评论,我在这种情况下使用了 eval

Edit: Forgot to mention, the formula itself is not the problem, as I can just use eval() function for that (I'm not concerned with security here so it's ok)

class Foo
{
    public function createFunction($formula, $args)
    {
        $func = function ($args) use ($formula) {
            foreach ($args as $key => $val) {
                $$key = $val;
            }
            return eval($formula);
        };
        return $func($args);
    }
}

$foo = new Foo;

$foo->createFunction('echo $a + $b;', ['a' => 1, 'b' => 2]);

您的代码的实时示例 https://3v4l.org/HrMKN