Quercus를 사용하여 프로그래밍 방식으로 실행되는 PHP 스크립트에 Java 인스턴스를 삽입하는 방법
문제
다음과 비슷한 코드가 있습니다.
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
자바 인스턴스로.이 같은:
SomeObject someObject = new SomeObject();
engine.setParam("obj", someObject);
분명히 이것은 단순한 예이지만 요점은 Java 클래스의 인스턴스를 사용할 수 있기를 원한다는 것입니다. 이미 인스턴스화되어 있는 것 PHP 스크립트에서.어떻게 해야 합니까?
해결책
나는 이것이 어디에도 문서화되어 있지 않다고 생각하지만, 소스 코드를 살펴보고 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에서 테스트했습니다.
제휴하지 않습니다 StackOverflow