كيفية حقن مثيلات Java في نصوص PHP النصية التي يتم تنفيذها برمجيًا باستخدام Quercus

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