Каков наилучший способ преобразовать существующий класс php в Java?

Мне было поручено преобразовать несколько классов php в java-классы, что быстро стало для меня кошмаром. Я понимаю базовую структуру языка, она похожа на C. Это все вызовы функций и вызовов классов, которые, похоже, ни к чему не приводят, и тот факт, что переменная может быть объявлена ​​в ! Середине выражения! это вращает мою голову, о, и факт, что есть ноль "0" документации.

Каков лучший метод (и / или) инструмент (и / или) справочный материал для преобразования php в код Java?

редактировать: есть 3 причины, по которым мне приходится конвертировать php в java.

  1. Обычная причина, мой босс сказал мне тоже.
  2. Php слишком медленный, иногда требуется несколько минут, чтобы выполнить запрос к серверу.
  3. php - это кошмар для масштабирования и поддержки (по крайней мере для нас строго типизированных типов языков)
12.12.2008 19:01:56
15 ОТВЕТОВ
РЕШЕНИЕ

Вы спрашиваете о лучших практиках. Я полагаю, что хорошей практикой в ​​вашем случае является подход, приятно представленный этим человеком: использование автоматизированного инструмента, вероятно, даст плохой результат: мусор внутри, мусор снаружи ...

У вас есть код: проанализируйте его широкими строками, если это необходимо. И заново создайте его на Java. Это может занять много времени, но не обязательно хуже, чем при слепом обращении. И вы можете документировать в пути, и, возможно, использовать этот анализ, чтобы найти проблемные части.

13
12.12.2008 21:18:50
Спасибо. Вот чем я сейчас занимаюсь. Мне не хватает понимания динамических языков, и я надеялся найти хоть какие-то справочные руководства. Я думаю, что мне придется научиться программировать на PHP, чтобы сделать это. [
WolfmanDragon 12.12.2008 21:24:33
Порты часто имеют такой тип сложности. Я согласен, что переписывание на новом языке, к сожалению, вероятно, требуется. В зависимости от области вы можете рассмотреть возможность создания модульных тестов, которые могут проверить, работает ли вывод независимо от языка. Таким образом, вы получите их все мимоходом. Порт это. Тогда посмотри, пройдут ли они еще.
Jonathan 1.05.2015 22:00:32
@JonathanLeaders Хороший совет. Конкретный вариант использования: я написал упрощенный анализатор уценки в Java в режиме TDD: я утверждаю, что данная строка MD дает ожидаемый результат (промежуточная структура, поскольку я не конвертирую напрямую в HTML), затем я пишу код, создающий тест на работу. Я планирую переписать это на другом языке (возможно, на Цейлоне). Портирование этого набора тестов должно быть довольно тривиальным, тогда я просто должен заставить их работать ... И тесты охватывают множество угловых случаев, так что это приведет к надежной реализации.
PhiLho 7.05.2015 10:28:05

Человек - лучший инструмент.

Я бы попытался переписать php, чтобы удалить большинство функций php, например C. Тогда вам будет легко переписать на Java.

Но мне нужно спросить, зачем вам конвертировать php? Разве вы не можете обернуть php во что-то вызываемое из Java? Таким образом, вы не добавите ошибок при конвертации.

11
12.12.2008 19:07:24
Преобразуйте его в C / C ++, используя HippHop xD
DarkMantis 15.09.2011 12:16:33

Я не могу представить, что инструмент для этого существует. Я сделал нечто подобное с C ++ и Java. Это боль, но лучше всего - помешать ей самим.

Или напишите это в C и создайте dll с jni warpper, чтобы вызвать его из Java. Это должно быть самым быстрым способом.

0
12.12.2008 19:18:35

В зависимости от кода PHP это может быть почти невозможной задачей. Обратный путь намного проще. PHP - очень динамичный язык, и вы можете избежать неприятностей, которые невозможны в Java. Одна особенно разрушительная вещь - то, что переменная PHP может изменить тип во время выполнения. Хотя это редко используется, но это может случиться. Кроме того, поскольку PHP свободно набран, существует много неявных преобразований. Некоторые совпадения, а другие важны для смысла программы. И еще есть факт, что PHP-код не является строго объектно-ориентированным, как Java. Даже в объектно-ориентированных программах PHP вы обычно видите некоторую степень процедурных элементов. Они не могут быть сопоставлены непосредственно с кодом Java.

Как пиролистик, мне интересно, почему вам нужно конвертировать этот код? Если это унаследованный код, не лучше ли будет поддерживать выполнение кода PHP и взаимодействовать с ним через какой-то интерфейс службы (SOAP, RPC и т. Д.)? Затем вы можете постепенно заменить детали с течением времени.

1
12.12.2008 19:21:25
То, что вы описали, это то, с чем я сталкиваюсь. Мне не нужно делать построчную переписку, пока java делает то же самое, что и php, все хорошо. PHP слишком медленный. Java не только работает быстрее (около скорости C), но и лучше кэшируется.
WolfmanDragon 12.12.2008 20:09:10
инструменты кеширования я должен был сказать.
WolfmanDragon 12.12.2008 20:09:42
Очевидно, вы знаете лучше, чем я, но PHP довольно неплох с точки зрения производительности. Может быть, вам лучше оптимизировать то, что у вас есть?
troelskn 12.12.2008 23:09:39

Возможно, вы могли бы написать что-нибудь с Reflection API, чтобы сделать что-то из этого, но вы действительно ничего не могли бы сделать с телами функций - вы бы в итоге получили класс-заглушку, у которых нет реализации.

0
12.12.2008 19:25:16
  1. выбросить код
  2. переписать в Java
  3. ????
  4. прибыль!
2
12.12.2008 19:33:47

Я рассматривал Groovy как язык перехода от PHP к Java. Они (разработчики Groovy) утверждают, что он компилируется в байт-код java так же, как и код Java.
Это также менее строгое, у них есть несколько примеров перевода на их сайте.

0
12.12.2008 19:52:41

Похоже, вы пытаетесь преобразовать PHP-код, который является процедурным, в базу OO-кода.

Это не столько вопрос PHP к Java, сколько изменение парадигмы. Там нет автоматизированного способа сделать это, это будет грубо. Особенно если плохо написана одна кодовая база.

Кстати, я бы тоже почему вы конвертируете? Это просто производительность? И если да, то вы ничего не можете сделать, чтобы исправить проблемы с производительностью. Я не думаю, что простое преобразование с одного языка на другой это исправит, вам все равно придется найти узкое место.

0
12.12.2008 20:24:41
PHP написан ОО с процедурным кодом, склеивающим его. Без документации и трехбуквенных имен. да, есть более одной горлышка бутылки, но моя работа - просто исправить узкое место кода.
WolfmanDragon 12.12.2008 20:33:08
@WolfmanDragon: узкое место связано не с трудностями понимания или внешнего вида кода, а с качеством кода: узкое место по скорости часто возникает, например, при обработке базы данных.
PhiLho 12.12.2008 21:07:51
Да, это совсем другое узкое место. Узкие места были найдены. PHP является узким местом, позже идет SQL.
WolfmanDragon 12.12.2008 21:13:02
Не видя код, я могу только догадываться, но мне трудно поверить, что язык является узким местом (и я фанат Java!). Конечно, вы можете получить лучшую производительность и обслуживание с Java, но переписать, как вы описываете, звучит довольно страшно, и я не вижу, чтобы это было намного лучше!
Stephane Grenier 12.12.2008 22:06:03
Мое предположение, и это только предположение, поэтому, пожалуйста, примите это так, что PHP-код выполняет много SQL-вызовов. По крайней мере, таков мой опыт работы с PHP-кодом. Большинство разработчиков PHP, кажется, просто вызывают БД всякий раз, когда не обращают особого внимания на затраты. Не все разработчики PHP, но много.
Stephane Grenier 12.12.2008 22:08:28

Я сказал об этом в вопросе « Советы по оптимизации PHP» и еще раз скажу здесь: если вы используете PHP из статической среды (модуль веб-сервера или FastCGI), используйте кэш кода операции, такой как APC . В противном случае PHP реинтерпретирует / перекомпилирует ваш код при каждом запросе!

2
23.05.2017 10:32:49

Для полноты, я должен отметить, что для JVM существует среда выполнения PHP. Проверьте Quercus .

Вы можете оставить текущую кодовую базу в PHP и просто запустить ее на JVM. Затем вы можете переписать код на Java по мере необходимости.

1
12.12.2008 21:49:33

Проверьте http://www.numiton.com

2
25.03.2009 02:50:07
Спасибо за вашу ссылку. Эта фаза проекта уже завершена, но она может помочь кому-то другому. Я буду утверждать это только по этой причине.
WolfmanDragon 30.03.2009 20:18:03
Ссылка в этом ответе теперь не работает, но есть несколько других переводчиков, которые могут конвертировать исходный код Java в PHP.
Anderson Green 17.09.2016 22:36:53

Сервер Caucho / Resin преобразует код PHP в сервлеты Java во время выполнения!

1
1.10.2009 08:54:29

Обычно я бы взял класс, сгенерированный php5servlet, банкой, доступной в tomcat & смолы.

Затем измените файл класса на Java.

ура

1
25.02.2010 05:28:33

Кто-то подразумевал, что Java не такая гибкая, как PHP: на самом деле она гораздо более гибкая (в том смысле, что ядро ​​API содержит тысячи классов и встроенную функциональность). Вам просто нужно изучить основные понятия обоих языков, такие как автобокс для Java, например, чтобы освободить место для динамических типов. Проверьте http://www.javaworld.com, и в настоящее время я работаю над переносом большого API с PHP на Java, это займет у меня несколько дней. Два класса, libcurl, разбор json и, возможно, сотня методов / функций.

2
9.10.2010 20:12:13

Я могу найти только два:

1) https://github.com/bafolts/java2php

2) http://www.runtimeconverter.com/

Существует также смола Caucho, но это не совсем конвертер. Это реализация php внутри Java.

В интернете много говорится о numiton, но их сайт не работает уже несколько лет.

0
14.11.2017 23:31:31