Я пишу веб-приложение, которое я хочу быть "сценарием" - это означает, что я хочу, чтобы пользователи могли писать небольшие фрагменты кода для добавления дополнительных функций.
Сценарий, который должен быть запущен, просто возвращает логическое значение, указывая, было ли выполнено условие, однако логика зависит от опроса объектов в основном блоке, поэтому мне нужен способ ввода среды, в которой вызывается eval
, - в сценарий интерпретируется.
Надевая на некоторое время вопросы безопасности, я хочу это сделать.
/* script pseudo code */
if object1.date() - today() < SOME_CONSTANT
return true;
else
if object2.field1 == 123 && oject1.date() > object2.field2
return true;
else
return false;
/* Main block of code */
$obj1 = New path\to\Object1();
$obj2 = New Path\To\Object2();
$result = eval($script);
if $result
doSomething();
Мои вопросы тогда:
Как я вставляю среду в строку, которая должна быть указана, чтобы я мог получить доступ к объекту в оцениваемом выражении?
global
оператор делает глобальные переменные доступными внутри функции. Итак, поставьте:
global $var1, $var2, $var3, ...;
в вашей функции, которая вызывает eval
, где все это глобальные переменные, к которым должны иметь доступ фрагменты.
global
оператор, чтобы добавить все объекты, которые они должны иметь возможность запрашивать, в локальную область.