Итак, некоторое время назад я создал синтаксический анализатор для плагина jQuery Query Builder, который анализирует формулу в PHP-код, который возвращает некоторые вычисления на основе добавленных параметров, он может варьироваться от return $a + $b;
до чего-то вроде
if($a == 'some_value' || $c == 'other_value') {
return $something;
} else if($b == 'something' && $d == 'anything') {
return $something_else;
} else {
return $anything;
}
а может быть еще сложнее. Дело в том, что он создает это как строку, которую я затем передал другой функции, которая возвращает динамическую функцию, созданную с помощью 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() для этого (я не беспокоюсь здесь о безопасности, так что все в порядке), просто я не уверен, как добавить динамическое количество параметров с именами динамических переменных.