动态数量为 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
所以,前段时间我为 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