从Java(Scala)调用PHP代码并获得结果

从Java(Scala)调用PHP代码并获得结果,java,php,scala,Java,Php,Scala,这似乎已经在几个地方被问及,并被标记为“关闭”和“离题”。然而,人们似乎经常遇到这个问题 (闭门) (闭门) (闭门) 在最后一个问题中,部分回答了这个问题,但没有说明如何阅读输出 我终于找到了问题的答案: 如何从Java内部运行PHP程序并获得其输出? 为了提供更多上下文,有人给了我一个PHP文件,其中包含返回字符串的某个方法foo的代码。我们如何从JVM调用它 在Google上搜索没有什么帮助,因为我找到的所有文章都没有解释如何从Java调用PHP,而是从PHP调用Java 下面的答案解释了

这似乎已经在几个地方被问及,并被标记为“关闭”和“离题”。然而,人们似乎经常遇到这个问题

(闭门)

(闭门)

(闭门)

在最后一个问题中,部分回答了这个问题,但没有说明如何阅读输出

我终于找到了问题的答案:

如何从Java内部运行PHP程序并获得其输出? 为了提供更多上下文,有人给了我一个PHP文件,其中包含返回字符串的某个方法
foo
的代码。我们如何从JVM调用它

在Google上搜索没有什么帮助,因为我找到的所有文章都没有解释如何从Java调用PHP,而是从PHP调用Java

下面的答案解释了如何使用PHP/Java桥实现这一点

答案在Scala中,但对于Java程序员来说很容易阅读。

从和创建的代码:

package javaphp

import javax.script.ScriptEngineManager
import php.java.bridge._
import php.java.script._
import php.java.servlet._

object JVM{ // shared object for PHP/JVM communication
  var out = ""
  def put(s:String) = {
    out = s
  }
}

object Test extends App {
  val engine = (new ScriptEngineManager).getEngineByExtension("php")  
  val oldCode = """
    <?php
        function foo() {
            return 'hello';
            // some code that returns string
        }
    ?>
  """
  val newCode = """
    <?php
        $ans = foo();
        java('javaphp.JVM')->put($ans);
    ?>
  """+oldCode

  // below evaluates and returns
  JVM.out = "" //reset shared output
  engine.eval(newCode)
  println("output is : "+JVM.out) // prints hello
}
scalac php.scala
scala javaphp.Test