Как сделать полный eval-результат в качестве возвращаемого значения функции

Я знаю, что Eval называется «зло», и это, кажется, худший путь для всего, но …
Как вернуть полный результат eval вне функции? Это всего лишь гипотетический вопрос, я нашел лучшее решение для меня.

В базе данных (хочу выполнить):

$var1 = "yes";
$var2 = "no";
include('file.php');

функция:

function executeScriptData($id) {
$data = anydbhandler("SELECT `data` FROM `data` WHERE ID = $id");
if(trim($data['data']) != "") {
echo $data['data']; // echo data from database
return eval($data['data']);
}
}

вызывающая функция:

executeScriptData(someID);

echo $var1; // nothing happened :(, no result

0

Решение

Убедитесь, что сглаживание происходит в той области, в которой вы хотите (сейчас $var1 доступно только в методе executeScriptData()).

Возможное решение:

function executeScriptData($id) {
$data = dbhandler("SELECT `data` FROM `data` WHERE ID = $id");
if(trim($data['data']) != "") {
return $data['data'];
}
}

$data = executeScriptData(SOMEID);
eval($data);

echo $var1;
1

Другие решения

Это невозможно с помощью возвращаемого значения, как говорят документы:

http://php.net/manual/en/function.eval.php

Returnvalues:

eval () возвращает NULL, если return не вызывается в вычисленном коде, и в этом случае возвращается значение, переданное в return. Если в обработанном коде есть ошибка синтаксического анализа, eval () возвращает FALSE, и выполнение следующего кода продолжается нормально. Невозможно отловить ошибку разбора в eval () с помощью set_error_handler ().


Возврат, который вы используете, находится в подвале eval, в дополнительной функции. Эта область не может закончить вашу оценку. В противном случае eval () не сможет определить функции в своем содержимом, потому что каждый случай возврата приведет к нарушению выполнения кода, переданного в eval ().

Все, что вы можете сделать, это сделать var global внутри вашего eval’ed-кода и перезаписать его в контексте.

$a = true;
$myVar = "abc";

eval('global $a; global $myVar; if($a == true) { $myVar = "def"; } ');

echo $myVar;
0

По вопросам рекламы [email protected]