如何将现有的php类转换为Java的最佳方法?

8
我被指派将几个php类转换为java类,这对我来说很快就变成了一场噩梦。我理解基本的语言结构,它与C语言相似。但所有的函数调用和类调用似乎都没有意义,而且在表达式中间声明一个变量让我感到困惑,还有就是完全没有文档可供参考。
什么是最好的方法(和/或)工具(和/或)参考资料来将php转换为java代码?
编辑:我需要将php转换为java有三个原因:
1.通常的原因,我的老板告诉我要这样做。
2.php太慢了,有时需要几分钟才能向服务器发送请求。
3.php对于我们这些强类型语言的人来说,是一个难以扩展和维护的噩梦。
15个回答

13

您询问最佳实践。我认为在您的情况下,一个好的做法是由theman提出的令人愉悦的方法:使用自动化工具可能会产生糟糕的结果:垃圾进,垃圾出...

您已经拥有代码:分析它,必要时可以以其广泛的轮廓重新创建它在Java中。这可能需要花费时间,但不一定比盲目转换更糟糕。您可以途中去记录文档,并且也可以使用此分析来找到问题部分。


谢谢。这正是我目前正在做的事情。我缺乏对动态语言的理解,并希望至少能有一些参考指南。我想我必须学习PHP编程来完成这项任务。[发抖] - WolfmanDragon
1
端口通常具有这种类型的复杂性。我同意,不幸的是,可能需要使用新语言进行重写。根据范围,您可以考虑构建单元测试,以验证输出是否正常工作,而不受语言的影响。这样,您就可以让它们全部通过。将其移植。然后查看它们是否仍然通过。 - Jonathan
1
@JonathanLeaders 很好的建议。具体应用场景:我用Java编写了一个简化的Markdown解析器,在TDD模式下:我断言给定的MD字符串会产生预期的结果(中间结构,因为我不直接转换为HTML),然后编写代码使测试工作。我计划在另一种语言(可能是Ceylon)中重写它。移植这组测试应该相当容易,然后我只需要让它们工作...而且测试覆盖了很多边角情况,所以它将导致一个坚实的实现。 - PhiLho

11

人是最好的工具。

我将尝试重写PHP代码以去除大部分php特性,使其更像C语言。这样你就可以轻松地将其改写为Java。

但我需要问一下,为什么需要转换PHP?难道不能将其包装成可从Java调用的形式吗?这样你在转换过程中就不会添加任何错误。


使用HippHop xD将其转换为C/C++。 - DarkMantis

3
有人暗示Java不如PHP灵活:实际上,Java默认情况下更加灵活(因为核心API包含成千上万的类和内置功能)。你只需要学习两种语言的核心概念,例如Java中的自动装箱,以便为动态类型腾出空间。请查看http://www.javaworld.com,我目前正在将一个大型API从PHP移植到Java,应该需要几天时间。涉及到两个类,libcurl、json解析,以及大约一百个方法/函数。

2

通常我会使用php5servlet生成的类,这是在tomcat和resin中可用的jar包。

然后将类文件更改为Java。

干杯!


2

我在PHP优化技巧问题中提到过,并在这里再次强调:如果您正在使用静态环境(Web服务器模块或FastCGI)运行PHP,请使用一个操作码缓存,比如APC。否则,PHP将在每个请求中重新解释/编译您的代码!


2

Caucho/Resin服务器可以在运行时将PHP代码转换为Java Servlets!


2

谢谢你提供的链接。该项目的这个阶段现在已经完成,但它可能对其他人有所帮助。出于这个原因,我会点赞它。 - WolfmanDragon
这个答案中的链接现在已经失效了,但是有几个其他的翻译器可以将Java源代码转换为PHP。 - Anderson Green

1
根据PHP代码,这可能是一项几乎不可能的任务。反过来则容易得多。PHP是一种非常动态的语言,您可以做一些在Java中不可能的事情。其中一个特别破坏性的事情是,在执行期间,PHP变量可能会更改类型。虽然很少使用,但确实可能发生。此外,由于PHP是弱类型的,存在许多隐式转换。有些是巧合的,而其他一些对程序的含义非常重要。还有一个事实,即PHP代码不像Java那样严格面向对象。即使在面向对象的PHP程序中,通常也会看到一定程度的过程化元素。这些不能直接映射到Java代码。
作为Pyrolistical,我很好奇您为什么需要转换此代码?如果它是遗留代码,保持PHP代码运行并通过某种服务接口(SOAP、RPC、其他)与其进行交互是否更好?然后您可以逐步替换部分内容。

你所描述的正是我遇到的问题。只要Java执行与PHP相同的操作,我就不必逐行重写代码,一切都很好。PHP太慢了。Java不仅运行速度更快(接近C语言的速度),而且具有更好的缓存机制。 - WolfmanDragon
我应该说的是缓存工具。 - WolfmanDragon
你显然比我更了解,但是PHP在性能方面相当不错。也许你最好优化一下你已经拥有的东西? - troelskn

1
  1. 丢弃代码
  2. 用Java重写
  3. ????
  4. 获利!

1

为了完整起见,我应该指出JVM中有一个PHP运行时。请查看Quercus

您可以考虑使用JVM使现有的PHP代码库正常运行,然后根据需要将代码重写为Java。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接