我的任务是将几个php类转换成java类,这很快就成了我的噩梦。我理解基本的语言结构,它类似于C.它是所有函数调用和类调用似乎无处可去的事实,var可以在!表达式的中间声明!强烈的>这是旋转我的头,哦,事实上,没有“0”文档。
将php转换为java代码的最佳方法(和/或)工具(和/或)参考资料是什么?
编辑:我有三个原因需要将php转换为java。
答案 0 :(得分:13)
您询问最佳做法。我相信在你的案例中一个好的做法是由theman愉快地呈现的方法:使用自动化工具可能会产生不好的结果:垃圾进入,垃圾出...
你有代码:如有必要,可以用粗线分析它。并用Java重新创建它。这可能是耗时的,但不一定比盲目转换更糟糕。您可以在途中记录,也许可以使用此分析来查找有问题的部分。
答案 1 :(得分:11)
人是最好的工具。
我会尝试重写php以删除大多数PHP功能到C之类的东西。然后,你将很容易用Java重写。
但是我需要问一下,为什么你需要转换php?你能不能将php包装成可以从Java调用的东西?这样,转换时就不会添加任何错误。
答案 2 :(得分:2)
答案 3 :(得分:2)
我在PHP Optimization Tips问题中说过这个问题,我将在此处再说一遍:如果您从静态环境(Web服务器模块或FastCGI)运行PHP,请使用操作码缓存,例如{{ 3}}。否则,PHP会在每次请求时重新解释/重新编译代码!
答案 4 :(得分:2)
答案 5 :(得分:2)
有人暗示Java不像PHP那么灵活:默认情况下,它实际上更灵活(因为核心API包含数千个类和内置功能)。您只需要学习两种语言的核心概念,例如Java的自动装箱,以便为动态类型腾出空间。查看http://www.javaworld.com,我目前正致力于将一个大型API从PHP移植到Java,我应该花几天时间。两个类,libcurl,json解析,可能还有一百个方法/函数。
答案 6 :(得分:1)
根据PHP代码,这可能是一项几乎不可能完成的任务。另一种方式更容易。 PHP是一种非常动态的语言,你可以摆脱Java中不可能发生的事情。一个特别具有破坏性的事情是PHP变量可能在执行期间改变类型。虽然这很少使用,但它可能会发生。另外,由于PHP是松散类型的,因此存在大量隐式转换。有些是巧合,而有些则对程序的意义很重要。然后有一个事实是PHP代码不像Java那样严格面向对象。即使在面向对象的PHP程序中,您通常也会看到某种程度的过程元素。这些不能直接映射到Java代码。
作为Pyrolistical,我很好奇为什么你需要转换这段代码?如果它是遗留代码,那么保持PHP代码运行并通过某种服务接口(SOAP,RPC,其他)与它进行交互不是更好吗?然后,您可以逐渐更换零件。
答案 7 :(得分:1)
为了完整起见,我应该指出JVM有一个PHP运行时。查看Quercus。
您可以考虑将当前的代码库保留在PHP中,然后让它在JVM上运行。然后,您可以根据需要用Java重写代码。
答案 8 :(得分:1)
Caucho / Resin服务器在运行时将PHP代码转换为Java servlet!
答案 9 :(得分:1)
我通常会使用php5servlet生成的类,这是一个可以在tomcat&树脂
然后将类文件更改为Java。
欢呼声
答案 10 :(得分:0)
我无法想象存在这样的工具。 我做了类似的C ++和Java。这是一种痛苦,但最好是通过自己来实现它。
或者在C中编写它并使用jni warpper创建一个dll以从Java调用它。这应该是紧固方式。
答案 11 :(得分:0)
你可能用Reflection API编写一些东西来做一些这样的事情,但你真的无法对函数体做任何事情 - 你最终会得到没有实现的存根类。
答案 12 :(得分:0)
我一直在研究Groovy作为从PHP到Java的过渡语言。他们(Groovy开发人员)声称它编译为java字节代码与Java代码相同。
它也不那么严格,他们在网站上有几个翻译的例子。
答案 13 :(得分:0)
听起来你正在尝试将程序化的PHP代码转换为OO代码库。
这不是PHP到Java的问题,而是范式的转变。没有自动化的方法,它会变得粗糙。特别是如果一个代码库写得不好。
顺便说一下,我也为什么要转换?这只是表演吗?如果是这样,您无法解决性能问题。 我认为只是从一种语言转换为另一种语言会解决它,你仍然需要找到瓶颈。答案 14 :(得分:0)
我只能找到两个:
1)https://github.com/bafolts/java2php
2)http://www.runtimeconverter.com/
还有Caucho树脂,但它不是完全转换器。它是Java内部的一个php实现。
互联网上有很多关于numiton的内容,但他们的网站已经停播了好几年了。