PHP eval и внедрение зависимостей

1

Я пишу веб-приложение, которое я хочу быть "сценарием" - это означает, что я хочу, чтобы пользователи могли писать небольшие фрагменты кода для добавления дополнительных функций.

Сценарий, который должен быть запущен, просто возвращает логическое значение, указывая, было ли выполнено условие, однако логика зависит от опроса объектов в основном блоке, поэтому мне нужен способ ввода среды, в которой вызывается 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();

Мои вопросы тогда:

Как я вставляю среду в строку, которая должна быть указана, чтобы я мог получить доступ к объекту в оцениваемом выражении?

  • 1
    Вы можете использовать global оператор, чтобы добавить все объекты, которые они должны иметь возможность запрашивать, в локальную область.
  • 0
    @Barmar: Бармар: Не могли бы вы уточнить с небольшим фрагментом ?. Я больше из C / C ++ / Python парня.
Показать ещё 1 комментарий
Теги:
dependency-injection
eval

1 ответ

0

global оператор делает глобальные переменные доступными внутри функции. Итак, поставьте:

global $var1, $var2, $var3, ...;

в вашей функции, которая вызывает eval, где все это глобальные переменные, к которым должны иметь доступ фрагменты.

  • 0
    Хорошо спасибо. Я попробую это просто, чтобы убедиться, что это работает в моем сценарии, и затем я приму ваш ответ. ура

Ещё вопросы

Сообщество Overcoder
Наверх
Меню