Runkit Sandbox: использовать экземпляры родительского класса?

Следующий код...

function getInstance() {
  echo "(getInstance() called)\n";

  return new TestClass();
}

class TestClass {
  function someMethod() {
    echo "someMethod called. Awesome!\n";
  }
}

$sandbox = new Runkit_Sandbox();
$sandbox['parent_access'] = true;
$sandbox['parent_call'] = true;

$sandbox->eval(
  '$PARENT = new Runkit_Sandbox_Parent; '.
  '$PARENT->getInstance()->someMethod();'
);

приводит к такому выводу в моей сборке PHP 5.4.10:

(getInstance() called)
PHP Warning:  Runkit_Sandbox::eval(): Error executing sandbox code in /home/projpf/_test/sandbox_test2.php on line 24

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

В случае, если вам интересно, что я пытаюсь сделать: я хотел бы преобразовать свои веб-скрипты PHP для долгосрочных работников, принимающих HTTP-запросы через RabbitMQ. Эти сценарии иногда должны выполнять тяжелые инициализации, которые могут кэшироваться как переменные, но не через какой-либо внешний кэш. Песочница позволила бы рабочему процессу загрузить правильный скрипт-обработчик, не оставляя никаких следов - за исключением тех данных, которые должны быть явно кэшированы, что в этом случае будет большим количеством экземпляров класса.

0 ответов

Другие вопросы по тегам