2012-03-14 2 views
0

을 사용하여 실행 PHP 스크립트로 자바 인스턴스를 주입하는 방법 :프로그래밍 나는이와 비슷한 코드가 신

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

내가 자바 인스턴스로 $obj을 설정할

를 (추가 정보를 원하시면 http://wiki.caucho.com/Quercus:_Command_Line_Interface_(CLI) 참조) . 이런 식으로 뭔가 :

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

는 분명히 이것은 단순한 예이지만 요점은 이미 PHP 스크립트에를 인스턴스화 된 자바 클래스 의 인스턴스를 사용할 수 있도록 할 것입니다. 내가 어떻게 할 수 있니?

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); 

희망 :

답변

0

나는이 어디서나 설명되어 있지만, QuercusEngine은 무엇을하고 있었는지보고, 그리고 약간의 시행 착오, 소스 코드를 통해보고 한 후이 걸리는 것을 생각하지 않습니다 이것은 누군가를 돕는다. Quercus 4.0.25에서 이것을 테스트했습니다.

관련 문제