Вот - без евалов и смс... Хотя неплохо бы проверить корректность получающегося кода. В 7 php есть контроль ошибок синтаксиса. Прикручивается факультативно.. Еще неплохо бы контролировать что выполняется и откуда оно берется.
$vars=[
'var1'=>100,
'var3'=>2
];
echo execute('{var1}/{var3}', $vars);
function execute($expr,$vars){
$functionname='_'.md5($expr);
if(!function_exists($functionname)){
$filename=$functionname.'.tmp.php';
if(!file_exists($filename)) {
$php_expr = preg_replace_callback('/{(.*?)}/', function ($m) use ($vars) {
if (isset($vars[$m[1]]))
return '$' . $m[1];
else
return $m[0];
}, $expr);
file_put_contents($functionname . '.tmp.php', sprintf('<' . '?php
function %s($vars){
extract($vars);
return %s;
}
', $functionname, $php_expr));
}
include_once($functionname.'.tmp.php');
}
return $functionname($vars);
}