convert python to php

Преобразование кода Python в PHP

Есть ли программный конвертер, который может автоматически конвертировать этот код Python в PHP?

7 ответов

Я не знаю ни одного конвертера Python-to-PHP в дикой природе, но портирование должно быть тривиальной задачей, и сходство довольно легко обнаружить:

Последние несколько строк в первой функции также могли быть написаны как стандартное троичное выражение PHP:

Нет такого инструмента, вам придется портировать код самостоятельно

Я создал конвертер python-to-php под названием py2php. Он может автоматически переводить основную логику, а затем вам нужно будет настроить вызовы библиотек и т. Д. Все еще экспериментально.

Вот автоматически сгенерированный PHP из питона, предоставленного OP.

Он не будет работать правильно из-за математического импорта и __contains__, но их будет достаточно легко исправить вручную.

Я задавался этим вопросом и обнаружил этот PyToPhp.py файл на сайте GitHubGist. Это просто и кажется отправной точкой для начала.

Я почти наполовину завершил создание интерпретатора PHP на Python, и я могу с уверенностью сказать, что существуют буквально десятки основных крайних случаев, которые реализуют тысячи возможностей, которые делают практически невозможным перенос Python на PHP. Python имеет гораздо более надежную грамматику, чем PHP, и, в то же время, еще более продвинут в языке, stdlib Python, вероятно, один из самых продвинутых по сравнению с любым другим языком в своем классе.

Источник

Converting Python Code to PHP [closed]

Want to improve this question? Update the question so it’s on-topic for Stack Overflow.

Is there a software converter out there that can automatically convert this python code to PHP?

6 Answers 6

I’m not aware of any Python-to-PHP converter in the wild, but it should be a trivial task to port and the similarities are quite easy to spot:

The last few lines in the first function could have also been written as a standard PHP ternary expression:

I created a python-to-php converter called py2php. It can auto-translate the basic logic and then you will need to tweak library calls, etc. Still experimental.

Here is auto-generated PHP from the python provided by the OP.

It would not run correctly due to the math import and __contains__, but those would be easy enough to fix by hand.

I am about 1/2 way done making a PHP interpreter in Python and I can tell you flat out that there are literally dozens of major edge cases that play out to thousands of possibilities that would make it almost impossible to port Python to PHP. Python has a much more robust grammar then PHP while further foward in the language, Python’s stdlib is probably one of the most advanced in comparison to any other language in it’s class.

My recommendation is to take your question one step further back, to why do you need a set of Python based logic in PHP. Alternatives to attempting to port/translate your code could include subprocessing from PHP to Python, using Gearman to have Python do work in the backend while PHP handles view logic, or a much more involved solution would be to implement a service bus or message queue between a PHP application and Python services.

PS. Apologies for any readability issues, finishing a 2 day sprint just now.

No such tool exists, you’ll have to port the code yourself

Источник

Преобразование кода Python в PHP

Есть ли программный конвертер, который может автоматически преобразовать этот код Python в PHP?

Я задавался вопросом сам этот же вопрос, и я нашел этот PyToPhp.py на сайте GitHubGist. Это просто и кажется отправной точкой для начала.

Я собираюсь взглянуть на это!

Я не знаю ни одного конвертера Python-to-PHP в дикой природе, но это должно быть тривиальной задачей для порта, и сходства довольно легко обнаружить:

Последние несколько строк первой функции также могли быть записаны как стандартное трехмерное выражение PHP:

Я создал конвертер python-to-php под названием py2php. Он может автоматически переводить основную логику, а затем вам нужно будет настроить библиотечные вызовы и т.д. Еще экспериментальный.

Вот автогенерированный PHP из python, предоставленный OP.

Он не будет работать корректно из-за импорта математики и __contains__, но это будет достаточно легко исправить вручную.

Читайте также:  Как часто снятся сны нормальному человеку

Я делаю около 1/2 пути, делая PHP-интерпретатор на Python, и я могу сказать вам, что есть буквально десятки основных дел кросс, которые разыгрывают тысячи возможностей, которые сделали бы почти невозможным перенос Python на PHP. Python имеет гораздо более надежную грамматику, а затем PHP, в то время как дальше в этом языке, Python stdlib, вероятно, является одним из самых продвинутых по сравнению с любым другим языком в нем.

PS. Извиняюсь за любые проблемы с читабельностью, заканчивая двухдневный спринт.

Источник

Convert python API example to PHP [closed]

I need to connect to a RESTful API. The only example the company gave me to connect to their API is a example in Python. I do not understand the language but am comfortable with PHP. Is there a way I can do this with cuRL and/or PHP?

Here is the example in Python:

2 Answers 2

Yes, you can do this in PHP. This python code doesn’t use any special python libraries; it’s just sending an HTTP request with specific headers and specific auth info. Actually translating this code from python into PHP is outside the scope of a typical StackOverflow answer, though.

First the «imports» are just external libraries, PHP has them built in. Everything up to token is just variables. The date and time methods all have similar functions in PHP. Then the «token» is just an array. Then «message_string» has a «join» and «encode» methods which are similar to what you would find in Javascript. The «signature» is a bit confusing but its basically doing an encryption and PHP has similar functions. Python is well documented so look up the functions for Python and then you should be able to figure out which PHP function is similar. After «signature» it is just assembling all the variables into the HTTP request and sending it.

Python, and PHP (and javascript) are C based languages. If you are good with one you can figure out the other, as long as you have good reference material. And as noted Python is well documented, so a Google search for the Python methods or functions should turn up the info you need to find its PHP equivalent.

API’s are never fun to work with, but they are not impossible. Most of them break down to being just an HTTP request you have to assemble, and then dissecting the response. A little trick, sometimes you can find in the API’s documentation, or on their forums (if they have them) or maybe tech support will send you, an example of what the HTTP request should look like. Then you can just build it in PHP.

As a closing note, it is good to learn how to convert between languages. It sounds like this is your first experience with it but most web developers run into this regularly and for a variety of different languages (python, c++, asp, ruby, ect). Based on what I have ran into in the past, yours is a fairly simple one to convert. I would loved to have had that as the example for the last API I had to work with.

Источник

Если вы решили перейти с PHP на Python, то к чему следует подготовиться

Думали ли вы когда-нибудь о том, что однажды слишком быстро втянулись в веб-программирование на PHP? И вот уже прошло много лет, у вас хороший опыт, и вы не думаете ни о каких других способах „делать“ веб, кроме как на PHP. Может быть, у вас возникают сомнения в правильности выбора, однако непонятно, как найти способ быстро его проверить. А хочется примеров, хочется знать, как изменятся конкретные аспекты деятельности.

Сегодня я попробую ответить на вопрос: «А что если вместо PHP писать на Python?».

Сам я долгое время задавался этим вопросом. Я писал на PHP 11 лет и даже являюсь сертифицированным специалистом. Я научился его «готовить» так, чтобы он работал в точности, как мне надо. И когда я в очередной раз читал на Хабре перевод статьи о том, как всё в PHP плохо, я просто недоумевал. Однако подвернулся случай пересесть на Ruby, а потом и на Python. На последнем я и остановился, и теперь попробую рассказать вам PHP-шникам, как нам питонистам живётся.

Читайте также:  завьялов расскажи мне про боль что дурманила

Формат статьи

Наилучший способ познавать новый язык — сравнение с регулярно-используемым, если новый язык не принципиально отличается от текущего. Неплохая попытка сделана на сайте Ruby, но, к сожалению, там мало примеров.

Также я должен отметить, что я сравню не все аспекты деятельности, а только те, которые будут бросаться в глаза в первые недели работы с новым языком.

Подготовка консолей

Я попытался сделать эту статью интерактивной. Поэтому при прочтении настоятельно рекомендую набирать примеры из неё в консолях. Вам понадобится консоль PHP, а лучше сразу psysh:

И консоль Python. Лучше поставить более удобные варианты bpython или ipython, чем встроенная в язык по умолчанию, так как в них уже есть автодополнение. Но можно и так:

И, чтобы применить изменение прямо сейчас без перезапуска консоли, выполнить:

Сам язык

Основные особенности

Правда, обычно у вас в коде типы перемешиваться не будут и данный эффект не будет мозолить вам глаза. В принципе, когда я писал на PHP, ситуаций когда нестрогая типизация реально помогала, было 1-2 на проект, а так обычно взаимодействовали переменные одного типа.

Философия строгой типизации накладывает свой отпечаток и на обработку ошибок. Например, если функция int должна возвращать целый тип, то она не может вернуть None на строку, из которой нельзя однозначно извлечь этот тип. Поэтому генерируется исключение. Это грозит тем, что всё, что прислал пользователь, надо преобразовывать в нужный тип, иначе вы рано или поздно схватите эксепшн на проде.

Это касается не только стандартных функций, но и некоторых методов для списков, строк, части функций во вспомогательных библиотеках. Обычно питон-разработчик примерно на память помнит, где какое исключение может упасть, и учитывает это. Если не помнит, иногда лазит в код библиотеки, чтобы подсмотреть. Но конечно же иногда бывает, что не все варианты учитываются, и порой пользователи ловят эксепшены на проде. Но поскольку это нечастое явление, и обычно веб-фреймворк присылает их админу на почту автоматически, всё довольно быстро чинится.

Чтобы использовать значения разных типов в одном выражении, вам нужно их преобразовать, для этого есть функции: str, int, bool, long. Ну а для форматирования есть более элегантные конструкции.

Строки

Форматирование

Теперь вам нужно просто переучиться:

Вариантов вроде больше и есть хороший вариант для локализаторов.

Методы строки

Самое главное, что есть в Python и чего не хватает в PHP, — это встроенные методы. Давайте сравним:

А как часто вы делали что-то типа такого?

Поддержка юникода

Ну и наконец юникод. В Python 2 все строки по умолчанию не юникод (В Python 3 — по умолчанию юникод). Но стоит вам подставить магическую букву u вначале строки, как она автоматически становится юникодной. И далее все встроенные (и не встроенные) строковые методы Python будут работать хорошо.


Подобную нативную поддержку юникода хотели завести в PHP 6, но не осилили.
В PHP, кстати, вы можете воспользоваться MBString function overloading и получить аналогичный эффект, но он отмечен, как устаревший. И вы лишаетесь работы с помощью перегруженных функций с бинарными строками, но вы по прежнему можете работать со строкой как с массивом.

«Сырые» строки

Многие из вас знают чем одиночные кавычки отличаются от двойных:

Что-то подобное есть и в Python. Если подставлять перед строкой литерал r, то это поведение почти аналогично одиночным кавычкам в PHP.

Массивы

Теперь разберёмся с массивом. В PHP вы могли запихнуть в качестве ключей целые числа или строки:


Несмотря на то что array переводится как массив, в PHP array не обычный массив (то есть список), а ассоциативный (то есть, словарь). Обычный массив в PHP тоже есть, это SPLFixedArray. Он ест меньше памяти, потенциально быстрее, но ввиду сложности объявления и сложности расширения практически не используется.

В Python для массива мы используем 3-4 типа данных:

Читайте также:  что написать в письме другу в другой город

Импорты

Ещё одна интересная вещь — импорты. Своеобразный альтернативный взгляд на неймспейсы с обязательным использованием.

В PHP ты написал require_once и дальше тебе это доступно, пока жива PHP-шная сессия выполнения. Обычно при использовании CMS люди запихивают всё в классы, а классы располагают в специальных местах, и пишут свою маленькую функцию, которая знает эти места и регистрируют её через spl_autoload_register в самом начале файла.

В питоне каждый файл — своя область видимости. И в нём будет доступно только то, что вы в него подгрузите. По умолчанию доступна только стандартная библиотека питона (около 80 функций). Но давайте лучше на примере:

Допустим, вы сделали файл tools/logic.py

И теперь хотите его использовать в файле main.py. В этой ситуации вам необходимо импортировать или весь файл или нужные вам части в файл, где вы работаете.

И так абсолютно везде. Почти все файлы на питоне начинаются с импортов в текущий файл вспомогательных питонячих объектов: ваших и встроенных библиотек. Это всё равно как если бы функции в PHP вида mysqli_*, pdo_*, memcached_*, а также весь ваш код находились только в неймспейсах, и вам приходилось бы каждый раз их импортировать в каждом файле. Какие преимущества у такого подхода?

Удобно ли каждый раз прописывать импорты? Это зависит от вашего склада ума. Если вам нравится больший контроль над кодом, то вы предпочтёте прописывание импортов, чем их отсутствие. В некоторых командах существует даже своя система правил, описывающих в каком порядке можно подключать внешний код для минимизации циклических импортов до минимума. Если в вашей команде нет таких правил и вы не хотите особо заморачиваться, то можно просто положиться на IDE, которая автоматически проставит импорты для всего, что вы используете. Ну и в довесок: импорты не уникальная особенность питона, в Java и C# тоже есть импорты, вроде никто не жаловался.

Параметры в функции *args, **kwargs

Синтаксис с параметрами по умолчанию в целом похож:

Но порой вам нужна функция под неизвестное количество аргументов. Это может быть: проксирующая функция, логирующая функция или функция для получения сигналов. В PHP, начиная с 5.6, вам доступен следующий синтаксис:

В Python аналогично можно ловить в массив неименнованные и в словарь именованные аргументы:

Соответственно *argslist неименованных аргументов, **kwargsdict именованных аргументов.

Классы

Давайте посмотрим на следующий код:

Какие основные отличия от PHP мы можем выделить:

Стиль кодирования

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

Версии питона

В PHP новые версии всегда обратно совместимы со старыми, хотя иногда требуется доработка напильником. В питоне есть Python 2 и Python 3. Они не совместимы в лоб, хотя в последнее время разработчики питона дело упростили сильно. Можно сразу писать под две версии, но если используются новые фишки Python 3 типа: встроенной асинхронной поддержки или особенностей нового юникода, то скорее всего ничего не получится. По этой причине вся «тяжёлая промышленность», которая имеет кодовую базу в несколько лет, до сих пор сидит на Python 2.
Разумных причин начинать новый проект на Python 2 на момент 2019 года нет.

Что на что меняется

Вместо выводов

Как понять надо ли оно вам?
Мой способ освоить Python

Если вы разработчик с опытом, то на всё не сильно напрягаясь уйдёт максимум две-три недели.

Обновлено: Мелкие исправления и улучшения (благодаря: dginz, defuz, dsx, Stepanow, Studebecker, svartalf).
Обновлено: Нашлись абстрактные классы (благодаря: yktoo). Так же со временем вам придётся познакомиться с удивительным миром декораторов.
Обновлено в 2018: Особенности распространенности Python 2 и 3.
Обновлено в 2019: Особенности Python 3.8 и англоязычный перевод.

Источник

Образовательный портал