Quercus를 사용하여 프로그래밍 방식으로 실행되는 PHP 스크립트에 Java 인스턴스를 삽입하는 방법

StackOverflow https://stackoverflow.com//questions/9706430

  •  14-12-2019
  •  | 
  •  

문제

다음과 비슷한 코드가 있습니다.

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에서 테스트했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top