Если вы возитесь со строкой, чтобы превратить ее в оператор возврата, вы можете использовать eval ...
function p($expr)
{
$php="return {$expr};";
echo "$expr is ".eval($php)."\n";
}
p("1+2");
Работает для простых выражений, но если вы попытались сослаться на переменную в вашем $ expr, то она не найдет ее внутри области функции p () - может помочь небольшой взлом, подобный следующему:
function p($expr)
{
$php="return {$expr};";
$php=preg_replace('/\\$(\w+)/', '$GLOBALS[\'$1\']', $php);
echo "$expr is ".eval($php)."\n";
}
$x=5;
p('$x+4');
Здесь мы ищем ссылки на переменные в коде и превращаем их в ссылки на массивы $ GLOBALS. Выражение $x+4
превращается в return $GLOBALS['x']+4;
Не уверен, что я бы хотел увидеть это в рабочем коде:)