Как внедрить Java-экземпляры в PHP-скрипты, программно выполняемые с помощью Quercus - PullRequest
0 голосов
/ 14 марта 2012

У меня есть код, похожий на этот:

QuercusEngine engine = new QuercusEngine();
Value value = engine.execute("<?php return $obj->getName(); ?>");
System.out.println(value);

(для получения дополнительной информации см. http://wiki.caucho.com/Quercus:_Command_Line_Interface_(CLI))

Я хочу установить $obj в качестве экземпляра Java.Примерно так:

SomeObject someObject = new SomeObject();
engine.setParam("obj", someObject);

Очевидно, что это упрощенный пример, но дело в том, что я хочу иметь возможность использовать экземпляры классов Java , которые уже были созданы в сценарии php,Как я мог это сделать?

1 Ответ

0 голосов
/ 15 марта 2012

Я не думаю, что это где-то задокументировано, но после просмотра исходного кода, просмотра того, что делал QuercusEngine, и небольшой пробной версии и ошибок, вот что нужно:

Path path = new StringPath("<?php return $obj->getName(); ?>");
QuercusContext quercusContext = new QuercusContext();
ReadStream reader = path.openRead();
QuercusProgram program = QuercusParser.parse(quercusContext, null, reader);
WriteStream out = new WriteStream(StdoutStream.create());
QuercusPage page = new InterpretedPage(program);

Env env = new Env(quercusContext, page, out, null, null);

SomeObject someObj = new SomeObject();

JavaClassDef classDef = env.getJavaClassDefinition(someObject.getClass());
env.setGlobalValue("obj", new JavaValue(env, someObject, classDef));

Value value = NullValue.NULL;

try {
  value = program.execute(env);
}
catch (QuercusExitException e) {
}

out.flushBuffer();
out.free();

System.out.println(value);

Надеюсь, это кому-нибудь поможет.Я проверял это в Quercus 4.0.25.

...